SQL中的GROUP BY用法

GROUP BY 是 SQL 中用来"按列分组"的子句

它把相同值的行分到同一个组 ,然后通常配合聚合函数COUNT, SUM, AVG, MAX, MIN 等)对每个组做统计,最终每组只返回一行结果。


✅ 1. 基本语法

sql 复制代码
SELECT 列1, 列2, 聚合函数(列3)
FROM 表名
GROUP BY 列1, 列2;
  • 规则SELECT 后面出现的非聚合列 ,必须全部出现在 GROUP BY 中。
    SELECT name, age, COUNT(*) FROM emp GROUP BY name;(错误,age 没分组)
    SELECT name, age, COUNT(*) FROM emp GROUP BY name, age;

✅ 2. 工作流程(3 步)

  1. 按 GROUP BY 列的值分组
  2. 把每组内的行聚合(用聚合函数)
  3. 每组返回一行结果

✅ 3. 示例表:sales

order_id region product amount
1 华北 苹果 100
2 华北 苹果 200
3 华南 苹果 150
4 华南 香蕉 80

🔍 按 region 分组,统计销售额

sql 复制代码
SELECT region,
       SUM(amount) AS total_sales
FROM sales
GROUP BY region;

结果:

复制代码
region | total_sales
-------|------------
华北   | 300
华南   | 230

🔍 按 region + product 分组,统计订单数

sql 复制代码
SELECT region,
       product,
       COUNT(*) AS order_cnt
FROM sales
GROUP BY region, product;

结果:

复制代码
region | product | order_cnt
-------|---------|----------
华北   | 苹果    | 2
华南   | 苹果    | 1
华南   | 香蕉    | 1

✅ 4. 常见搭配

搭配 作用 示例
GROUP BY + HAVING 对聚合结果再过滤 HAVING SUM(amount) > 200
GROUP BY + ORDER BY 对分组结果排序 ORDER BY total_sales DESC
GROUP BY + 多列 更细粒度分组 GROUP BY region, product

✅ 5. 易错点

  • SELECT 里写了列,却没写进 GROUP BY → 报错(MySQL 除外,它有宽松模式)。
  • WHEREHAVING 的区别:
    • WHERE:在分组前过滤原始行
    • HAVING:在分组后过滤聚合结果

✅ 6. 一句话总结

GROUP BY 就是"把相同值的行捆成一组,然后对每组做统计",是 SQL 里做报表、汇总、统计的核心工具。

相关推荐
志栋智能2 分钟前
超自动化巡检:洞察未知隐患,助您事前不出事
大数据·运维·网络·数据库·自动化
流觞 无依7 分钟前
DedeCMS plus/digg.php 顶踩注入(SQL注入)修复教程
sql·安全·php
Teable任意门互动11 分钟前
多维表格本地化部署实践解析 企业如何实现数据自主可控路径
数据库·excel·钉钉·飞书·开源软件
You Only Live Once_215 分钟前
SQLite3部署与配置[WIN11]
数据库·sqlite
光泽雨16 分钟前
mysql体系结构
数据库·mysql
云飞云共享云桌面16 分钟前
8-10位研发3D(sw、ug、creo)画图如何共享一台工作站?
运维·服务器·网络·数据库·3d·电脑
TDengine (老段)22 分钟前
TDengine IDMP 事件 —— 事件模板
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
一只大袋鼠26 分钟前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
正在走向自律27 分钟前
时序数据库选型指南:在数据洪流中寻找坚实的锚点
数据库·时序数据库·apache iotdb
wljt30 分钟前
达梦数据库恢复数据
数据库·数据库开发