如何对SQL分组查询结果按object字段分组求和max列数值
正确实现SQL二次聚合查询的方案
现有写法的问题
- 拟写的查询直接访问原始表
total,没有基于第一次聚合后的结果计算,无法得到目标值 - 存在语法错误:关键字拼写错误
FORM应为FROM,SELECT字段列表末尾多了多余逗号 - 补充:你第一次的查询语句中
GROUP BY后的字段拼写为obect,应为object,否则会直接执行报错;另外max、min属于SQL内置关键字,作为字段别名使用时建议用反引号包裹避免冲突。
正确实现方式
方式1:子查询嵌套(全数据库版本兼容)
SELECT object, SUM(`max`) AS sum_max FROM ( -- 第一次按object、date分组聚合的正确语句 SELECT object, date, MAX(`min`) as `max` FROM total GROUP BY object, date ) AS first_agg_result GROUP BY object;
方式2:CTE公共表表达式(支持MySQL8.0+、PostgreSQL、SQL Server等主流数据库新版本)
WITH first_agg_result AS ( SELECT object, date, MAX(`min`) as `max` FROM total GROUP BY object, date ) SELECT object, SUM(`max`) AS sum_max FROM first_agg_result GROUP BY object;
示例数据运行结果
| object | sum_max |
|---|---|
| 2 | 1215 |
| 3 | 555 |
| 4 | 630 |
| 5 | 555 |
内容的提问来源于stack exchange,提问作者konakzizu
相关产品推荐
相关产品推荐

