如何用SQL在保持明细的同时展示汇总值_巧用OVER子句

张开发
2026/4/16 14:06:19 15 分钟阅读

分享文章

如何用SQL在保持明细的同时展示汇总值_巧用OVER子句
OVER子句需避免混用普通聚合与窗口函数、禁用GROUP BY空括号表示全表汇总PARTITION BY须基于SELECT中已存在字段ORDER BY仅影响排序敏感函数MySQL 8.0等主流数据库支持。OVER 子句怎么写才不报错常见语法陷阱直接在 SELECT 里加 SUM(column) OVER() 却提示“窗口函数必须有 OVER 子句”或“GROUP BY 冲突”通常是因为混用了聚合和非聚合字段又没加 OVER或者写了 GROUP BY 却还在用窗口函数——这两者互斥。OVER 的本质是「不折叠行」所以只要用了它整条 SELECT 就不能再有普通聚合比如裸 SUM()或 GROUP BY。OVER() 空括号表示全表范围汇总但字段必须出现在 SELECT 列表中不能只出现在 OVER 里如果要按类别汇总得写 OVER(PARTITION BY category)不是 GROUP BY categoryORDER BY 在 OVER 里仅影响排序敏感的函数如 ROW_NUMBER()、AVG() OVER(ORDER BY ...)对 SUM() OVER(PARTITION BY ...) 没影响别多写明细汇总共存典型场景下的写法对比比如查每个订单的金额同时显示该客户的总消费额。不用 OVER 就得自连接或子查询容易漏数据或性能差用 OVER 就一行搞定且保持原始行数不变。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

更多文章