分组查询
语法
bash
SELECT 字段列表 from 表名 WHERE 条件 GROUP BY 分组字段名 HAVING 分组后过滤条件
where 与 having 区别
执行时机不同, where 是分组之前过滤,不满足 where 条件不参与分组,而 having 是分组之后对结果过滤
判断条件不同,where 不能对聚合函数进行判断,而 having 可以
bash
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
- 执行顺序: where > 聚合函数 > having
- 支持多字段分组,具体语法为 group by columnA,columnB
案例
根据性别分组,统计男员工和女员工的数量
bash
SELECT gender,count(*) from emp group by gender;
根据性别分组,统计男员工和女员工的平均年龄
bash
SELECT gender,avg(age) from emp group by gender;
查询年龄小于 45 的员工,并依据 工作地址分组,获取员工数量大于等于 3 的工作地址
bash
SELECT workaddress,count(*) from emp WHERE age<45 group by workaddress having count(*) >=3;
统计各个工作地址上班的男性和女性员工的数据
bash
SELECT gender , workaddress ,count(*) from emp group by gender,workaddress;