SQL分组查询

什么是分组查询?

在我们的实际应用中,我们有这样的需求,需要先进行分组,然后对每一组数据进行操作。
计算每个部门的工资和??
计算每个工作岗位的最高工资??

怎么进行分组查询

select 
	...
from
	...
group by
	...
order by
	...

注意:以上关键字的执行顺序不可以改变
执行顺序是什么?

  1. from
  2. where
  3. group by
  4. select
  5. order by

案例思路

  1. 找出每个工作岗位的工资和。
    先按照工作岗位分组,然后对工资求和
select 
	job,sum(sal)
from
	emp
group by
	job 

执行顺序
先对job字段进行分组,分组之后然后对工资一组一组的求和。

  1. 找出每个部门的最高工资
select
	deptno,max(sal)
from
	emp
group by
	deptno
  1. 找出"每个部门不同工作岗位"的最高薪资
    技巧:把两个字段看成一个字段
select 
	depton ,job,max(sal)
from
	emp
group by
	deptno,job
  1. 找出每个部门最高工资,要求显示最高工资大于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,

  1. 案列:where完成不了的
    找出每个部门的平均薪资,要求显示平均工资高于2500的
select
	depton,avg(sal)
from
	emp
group by
	depton
having	
	avg(sal)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值