如何在同一结果集中计算月度求和值的平均值
问题描述
我有一张包含dateTime和quantity字段的operation表,表结构及示例数据如下:
| dateTime | quantity |
|---|---|
| 2024-01-01 | 1 |
| 2024-02-05 | 2 |
我已经实现了按月分组统计quantity总和的SQL语句:
SELECT MONTH(o1.dateTime), SUM(o1.quantity) FROM operation o1 WHERE o1.dateTime between '2024-01-01' and '2024-12-31' GROUP BY MONTH(o1.dateTime)
现在需要在同一结果表中,同时展示月度求和值以及所有月度求和值的年度平均值,预期结果如下:
| Month | SUM(quantity) | AVG(XXX) |
|---|---|---|
| 01 | 1860 | 1648 |
| 02 | 1899 | 1648 |
| 03 | 1677 | 1648 |
| 04 | 2166 | 1648 |
| 05 | 1576 | 1648 |
| 06 | 1718 | 1648 |
| 07 | 2144 | 1648 |
| 08 | 872 | 1648 |
| 09 | 924 | 1648 |
解决方案
直接使用窗口函数AVG() OVER ()即可实现需求,无需额外子查询或表连接,修改后的SQL如下:
SELECT MONTH(o1.dateTime) AS Month, SUM(o1.quantity) AS `SUM(quantity)`, AVG(SUM(o1.quantity)) OVER () AS `AVG(XXX)` FROM operation o1 WHERE o1.dateTime BETWEEN '2024-01-01' AND '2024-12-31' GROUP BY MONTH(o1.dateTime)
逻辑说明
SUM(o1.quantity)先按月份分组计算出每个月的quantity总和AVG(SUM(o1.quantity)) OVER ()会在分组后的结果集上,计算所有月度总和的平均值,并将该值填充到结果的每一行中
内容的提问来源于stack exchange,提问作者John919
相关产品推荐
相关产品推荐

