如何将 table1.column1 的值设置为 table2.column2 的平均值

Posted

技术标签:

【中文标题】如何将 table1.column1 的值设置为 table2.column2 的平均值【英文标题】:How to set value of table1.column1 to an average of table2.column2 【发布时间】:2012-07-16 07:06:56 【问题描述】:

我已经查看了所有内容,但似乎找不到明确的解决方案。如果我错过了,对不起。

我的问题: 我有每小时累积并放在 table1 中的数据 我希望 table2.metric_ 包含当天 table1.metric_ 的平均值。

table1:record_key_、id_、metric_、date_

table2:record_key_、id_、metric_、date_

获取我使用当天的记录列表: SELECT * FROM table1 t WHERE t.date_ >= DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE t.id_='id1';

table2 的 INSERT 查询是什么样的,所以 table2.metric_ 是 table1.metric_ 列中由前一个 SELECT 语句返回的 table1 中所有 id1 记录的平均值?

【问题讨论】:

AVG 函数只返回单行。现在告诉我你想插入单行还是其他什么? 单行,我正在尝试将每小时数据合并为每日平均值 【参考方案1】:
insert into table2 SELECT avg(total) FROM (SELECT count(*) as Total FROM table1 t WHERE t.col= DATE_SUB(NOW(),INTERVAL 1 DAY) group by colname) as a

【讨论】:

【参考方案2】:
INSERT INTO table2 metric_
       SELECT AVG(t.metric_) FROM table1 t WHERE t.date_ >= DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE t.id_='id1');

应该是解决方案 您可以在 SELECT 语句中添加您喜欢的 date_ 格式

没有测试查询,因为我没有 mysql 测试数据库。

来源:INSERT-SELECT in MySQL reference

(我无法评论接受的答案,但我很确定这是错误的?它计算有多少条目并计算平均值(一天有多少小时?)

【讨论】:

以上是关于如何将 table1.column1 的值设置为 table2.column2 的平均值的主要内容,如果未能解决你的问题,请参考以下文章

sql server 2000 中如何知道 table1.column1 是不是存在

SQL 中的 LEFT JOIN 但不包括连接 where table1.column1 = 'specific_value'

如何从一个表列中获取值,将它们与字符串连接并将它们插入另一个表中?

使用另一个表的记录作为WHERE参数更新一个表中的记录

查找 SQL 表之间的差异

使用另一个表的记录作为 WHERE 参数更新一个表中的记录