Skip to content

分组查询 GROUP BY

1. 语法:

sql
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [ HAVING 分组后过滤条件]

2. where 与 having 的区别

  • 执行时间不同:where 是分组之前进行过滤,不满足 where 条件,不进行分组
  • 判断条件不同:where 不能对聚合函数进行判断,但 having 可以

3. 样例

  • 根据性别分组,统计男员工和女员工的数量
sql
SELECT gender,COUNT(*) FROM emp
GROUP BY gender;
  • 根据性别分组,统计男员工和女员工的平均年龄
sql
SELECT gender,avg(age) FROM emp
GROUP BY gender;
  • 查询年龄小于 45 的员工,并根据工作地址分组,获取员工数量大于等于 3 的工作地址
sql
select workaddress,count(*) from emp
where age < 45
group by workaddress
having count(*)>=3

4. 注意

  • 执行顺序:where -> 聚合函数 -> having
  • 分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义