9.7分组查询 group by
9.7.1场景
(1)分组之后的结果:和具体一条数据没有关系
(2)分组后和聚合函数一起使用
(3)需求中包含:“每”,“各”这种,group by
9.7.2 group up
统计各个部门的人数
部门的ID 人数 平均工资
10 6 600
20 3 300
30 4 400
select
deptno,count(*),avg(sal)
from
emp
group by
deptno
统计各个部门的平均工资。
部门的ID 平均工资
10 600
20 300
30 400
统计各个部门的人数情况和平均工资
Select
deptno,count(*),avg(sal)
from emp
group by
deptno;
统计各个部门各个岗位的人数
部门的ID 岗位 人数
1 java开发 10
1 前端开发 6
2 出纳 2
2 会计 4
select
deptno,job,count(*)
from
emp
group by
deptno,job;
9.7.3 having
需求:统计平均工资超过2000的部门。
(1)算出各个部门的平均工资。
(2)过滤,只留下超过2000的。
select
deptno,avg(sal) as sal_avg
from emp
group by deptno
having sal_avg > 2000;
9.7.4 where和having的区别
Where:过滤;分组之前过滤; 对数据源进行过滤
Having:过滤;分组之后过滤
过滤部门是30的平均工资超过1000
select
job,avg(sal) as sal_avg
from
emp
where deptno=30
group by
job
having
sal_avg >1000;