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 里做报表、汇总、统计的核心工具。

相关推荐
Elastic 中国社区官方博客2 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.6 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐10 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999913 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
证榜样呀24 分钟前
2026 中专大数据技术专业可考的证书有哪些,必看!
大数据·sql
Codefengfeng33 分钟前
数据安全知识点速通
sql
自不量力的A同学44 分钟前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann