MySQL基础知识—分组查询

介绍

实际应用中,可能有这样的需求,要先进行分组,然后对每一组的数据进行操作,这时就需要用到分组查询。

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

例如:

​ 计算每个部门的工资和?

​ 计算每个工作岗位的平均薪资?

关键字组合

将之前学习的关键字组合起来,它们的执行顺序如下:

select
   ....
from
   ....
where
   ....
group by
   ....
having
   ....
order by
   ....

执行顺序:

from------> where -------> group by-------->having---------> select----------> order by

案例1

题目:找出每个部门,不同工作岗位的最高薪资?

思路:按照“部门和工作岗位”联合字段进行分组,然后求最高薪资。

语句:

select
   deptno,job,max(sal)
from
   EMP
group by
   deptno,job;

执行顺序:

  • 从EMP表中查询数据
  • 根据job和deptno字段联合字段进行分组
  • 对每一组的数据进max(sal)求最高薪资。

image-20210905095401588

结论:在select语句中,如果有group by语句,select后只能跟分组字段和分组函数。

案例2

题目:找出每个部门的最高薪资,并且要求显示最高薪资大于3000的。

思路:

​ 1、找出每个部门的最高薪资

select deptno,max(sal) from EMP group by deptno;

​ 2、按照要求显示最高薪资大于3000

方法一:

【注意】:这里可以使用having对分完组之后的数据进一步进行过滤,但是having不能单独使用,不能代替where,必须和group by联合使用。

select deptno,max(sal) from EMP group by deptno having max(sal) > 3000;

image-20210905100314866

思考:上述方法是先进行分组后再找出大于3000的,这样的效率是不是低呢?

方法二:

思路:先找出薪资大于3000的,然后再进行分组。

select deptno,max(sal) from EMP where sal > 3000 group by deptno;

image-20210905100552815

【优化策略】where和having优先选择where,where实在完成不了了再用having。例如:找出每个部门平均薪资,要求显示平均薪资高于2500的,这里就没有办法用where。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值