我有一个MySQL数据库,耗电量超过20年。 我想查询一个月内每个月的平均耗电量。
例如,使用此数据库,
date power_consumption
2014/03/30 30
2014/04/30 40
2014/05/30 50
2014/06/30 20
The result would be, from 2014/04
month average_so_far_from_april_2014
2014/04 40.0
2014/05 45.0
2014/06 36.667
如果我无法在一个查询中实现此功能,那么我应该选择哪种查询来检索此任务的最有用数据? (我天真的方法是查询整个表并计算我的应用程序中的平均值。)
答案 0 :(得分:1)
根据消费表加入子查询表,消费表获取消费表的唯一月份,并且年/月小于或等于子查询中的一个的连接条件使用AVG聚合根据年/月分组的表格中的功耗
这样的事情: -
SELECT consumption_month,
AVG(b.power_consumption)
FROM
(
SELECT DISTINCT DATE_FORMAT(`date`, '%Y%m') AS consumption_month FROM consumption_table a
) a
INNER JOIN consumption_table b
ON consumption_month >= DATE_FORMAT(b.`date`, '%Y%m')
WHERE b.`date` >= '2014/04/01'
GROUP BY consumption_month
SQL小提琴: -
http://www.sqlfiddle.com/#!2/16588/2
如果你每个月只有一条记录,你可以通过在不需要子查询的情况下对表进行连接来简化它。
答案 1 :(得分:0)
GROUP BY
是针对这类问题的。对于GROUP BY
子句的表达式的每个不同值计算平均值。
SELECT DATE_FORMAT(date, '%Y/%m'), AVG(power_consumption)
FROM table_name
WHERE date > ...
GROUP BY DATE_FORMAT(date, '%y/%m')
ORDER BY DATE_FORMAT(date, '%y/%m')
您可以获得每个月的平均值,DATE_FORMAT(date, '%y/%m')
是年份和月份,格式为YYYY / MM