什么是分组查询?
在我们的实际应用中,我们有这样的需求,需要先进行分组,然后对每一组数据进行操作。
计算每个部门的工资和??
计算每个工作岗位的最高工资??
…
怎么进行分组查询
select
...
from
...
group by
...
order by
...
注意:以上关键字的执行顺序不可以改变
执行顺序是什么?
- from
- where
- group by
- select
- order by
案例思路
- 找出每个工作岗位的工资和。
先按照工作岗位分组,然后对工资求和
select
job,sum(sal)
from
emp
group by
job
执行顺序
先对job字段进行分组,分组之后然后对工资一组一组的求和。
- 找出每个部门的最高工资
select
deptno,max(sal)
from
emp
group by
deptno
- 找出"每个部门不同工作岗位"的最高薪资
技巧:把两个字段看成一个字段
select
depton ,job,max(sal)
from
emp
group by
deptno,job
- 找出每个部门最高工资,要求显示最高工资大于3000的
select
deptno,max(sal)
from
emp
group by
deptno
having
max(sal)>3000
使用having可以对数据进行进一步过滤,having不可以单独使用,必须和group by 联合使用。
优化方案:先将大于3000的都找出来,然后在进行分组。
select
deptno,max(sal)
where
sal>3000
group by
deptno;
优化策略,where和having,优先使用where,where完成不了的,使用having,
- 案列:where完成不了的
找出每个部门的平均薪资,要求显示平均工资高于2500的
select
depton,avg(sal)
from
emp
group by
depton
having
avg(sal)