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

相关推荐
zhangfeng11337 分钟前
生物信息 R语言和 cytoscape 相互沟通的组件RCy3,构建cytoscape网络表 节点类型表 链接边的表,并推送到cytoscape
数据库·r语言·生物信息
小森( ﹡ˆoˆ﹡ )12 分钟前
GPT_Data_Processing_Tutorial
数据库·gpt·mysql
krielwus1 小时前
Oracle Linux 7.8 静默安装 Oracle 11g R2 单机 ASM 详细教程
数据库·oracle
翔云1234561 小时前
向量数据库的几个核心概念
数据库
sniper_fandc1 小时前
关于Mybatis-Plus的insertOrUpdate()方法使用时的问题与解决—数值精度转化问题
java·前端·数据库·mybatisplus·主键id
lang201509281 小时前
MySQL在线DDL:零停机改表实战指南
数据库·mysql
程序新视界2 小时前
MySQL的联合索引以及其最左前缀原则
数据库·mysql
奥尔特星云大使2 小时前
mysql 全备+binlog恢复数据
数据库·mysql·adb·数据恢复·全量备份·binlog日志·二进制日志
the beard2 小时前
Redis Zset的底层秘密:跳表(Skip List)的精妙设计
数据库·redis·list
William_cl3 小时前
【连载5】云数据库 MySQL 热点更新功能介绍
数据库·mysql