Skip to content

DQL - 分组查询

关键字

  • group by:分组
  • having:分组后结果过滤

语法

sql
select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后的过滤条件;

提示

where 与 having 的区别

  • 执行时机不同
    • where 是分组之前的过滤,不满足 where 条件不参与分组
      
    • having 是分组之后 对结果进行过滤
      
  • 判断条件不同
    • where 不能对聚合函数进行判断
      
    • having 可以
      

要点

  • 执行顺序

    where > 聚合函数 > having

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

案例练习

sql
-- 1. 根据性别分组,统计男性员工和女性员工的数量
select gender, count(*) from emp group by gender;

-- 2. 根据性别分组,统计男性员工和女性员工的平均年龄
select gender, avg(age) from emp group by gender;

-- 3. 查询年龄小于45岁的员工,并根据工作地址分组,获取员工数量大于3的工作地址
select workaddress, count(*) as addressCount from emp where age < 45 group by workaddress having addressCount >= 3;