我有一个大致具有以下结构的SQL表:
id | datetime | value
---------------------
我想要的是获得具有以下结构的结果:
id | value_avg_overall | value_avg_last_month | value_avg_last_week
-------------------------------------------------------------------
目前我正在使用JOIN
,即构建类似于该查询的查询:
SELECT *
FROM (
SELECT_OVERALL INNER JOIN SELECT_LAST_MONTH ON SELECT_OVERALL.id = SELECT_LAST_MONTH.id
)
INNER JOIN SELECT_LAST_WEEK ON SELECT_LAST_WEEK.id = SELECT_LAST_MONTH.id;
我简化了查询以使其更具可读性,SELECT_*
语句是使用SELECT
和GROUP BY
的各个时间范围的简单AVG()
语句。
这是执行多个聚合并在MySQL中的单个结果集中返回所有聚合的最有效方法吗?
答案 0 :(得分:2)
这称为条件聚合:
$("input[field='" + myField + "']").focus();
答案 1 :(得分:0)
我相信你可以不加入就行。
SELECT id, AVG(value), AVG(IF(date BETWEEN x AND y, value, NULL)) FROM table GROUP BY id