分组查询
创建分组
关键词:group by
作用:根据一个或多个字段对结果集进行分组,在分组的字段上可以使用count,sum,avg等函数
select 字段1[字段2,function(字段1),function(字段2)...]
from 表
group by 字段1;
#统计部门ID为20 的员工数量
select count(*) from emp where deptno = 20;
#统计每个部门的人数
selecr deptno,count(*)
from emp
group by deptno;
注意:
- 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,他们将分为一组。
- group by子句必须出现在where子句之后,order by子句之前
过滤分组(having)
关键词:having
介绍:having非常类似于where。唯一的差别就是where过滤行,而having过滤分组。having必须和group by一起用。
having和where的区别
where是分组前过滤,having是分组后过滤。
select deptno,count(*)
from emp
group by deptno
having count(*) > 5;
select deptno,count(*)
from emp
where sal > 1000
group by deptno
having count(*) > 2;
5.select 字段名 | 对当前临时表进行整列读取 |
1.from 表名 | 将硬盘上的表文件加载到内存 |
2.where... | 将符合条件的数据进行摘取生成一张新的临时表 |
3.group by... | 根据列中的数据种类,将当前临时表划分成若干个新的临时表 |
6.order by.. | 对select生成的临时表重新排序,生成新的临时表 |
7.limit.. | 对最终生成的临时表进行截取 |