如何在MySQL中对临时表执行计算,获取按周分组聚合后的列平均值
按周分组二次求平均值的SQL实现方案
原有语句错误原因
你当前的SQL执行逻辑是先对每行数据计算amount/div,再按周分组求单行列值的平均值,和需求的计算顺序完全不符,因此无法得到预期结果。
需求的计算顺序为:
- 按
week字段分组,分别对amount、div两个字段求和 - 计算每个分组的「求和后amount/求和后div」得到周维度比值
- 对所有周的维度比值求平均值
正确实现代码
通用子查询写法(兼容所有SQL数据库)
SELECT ROUND(AVG(week_ratio), 2) AS final_result FROM ( SELECT SUM(amount)/SUM(div) AS week_ratio FROM mytable GROUP BY week ) AS week_calc;
CTE写法(适用于支持公共表表达式的数据库,如MySQL8.0+、PostgreSQL、SQL Server等)
WITH week_calc AS ( SELECT SUM(amount)/SUM(div) AS week_ratio FROM mytable GROUP BY week ) SELECT ROUND(AVG(week_ratio), 2) AS final_result FROM week_calc;
执行上述语句即可直接得到保留两位小数的预期结果8.77。
内容的提问来源于stack exchange,提问作者Deiakk96
相关产品推荐
相关产品推荐

