SQL中聚合函数是否必须与GROUP BY分组语句搭配使用?
SQL聚合函数与分组操作绑定规则解答
聚合函数并非必须与分组(GROUP BY)操作绑定使用,具体规则可以分为两类场景:
- 无分组强制要求的场景:如果SELECT查询的返回列里只有聚合函数,不存在任何需要单独展示的非聚合普通字段,完全可以省略GROUP BY。此时聚合函数会直接对所有符合WHERE筛选条件的全量数据做计算,最终返回单条汇总结果。
例如统计全平台所有订单的总交易金额,以下写法完全符合SQL标准语法,不需要加分组:SELECT SUM(unit_price * quantity) AS all_total_price FROM orders o JOIN order_items oi ON o.order_id = oi.order_id - 必须搭配分组的场景:如果SELECT查询的返回列里同时存在非聚合的普通字段、聚合函数,就必须搭配GROUP BY操作,且所有SELECT里出现的非聚合普通字段都要写入分组维度,否则会触发标准SQL语法报错。
你提供的示例就属于这类场景:需要返回非聚合字段customer_id,同时要统计每个客户的消费总额,因此必须按customer_id做分组,对应写法如下:SELECT customer_id, SUM(unit_price * quantity) AS total_price FROM orders o JOIN order_items oi ON o.order_id = oi.order_id GROUP BY customer_id
注:部分数据库(如MySQL)存在特殊兼容逻辑,手动关闭
ONLY_FULL_GROUP_BY校验开关时,即使非聚合字段没写在GROUP BY里也能执行,但这类写法不属于SQL标准规范,返回的字段值存在不确定性,生产环境不推荐使用。
内容的提问来源于stack exchange,提问作者BarBaro
相关产品推荐
相关产品推荐

