分组查询 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
- 分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义