主题
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;