分组查询(重要)

1.什么是分组查询?

在实际的开发中,可能需要先对一组数据进行分组,然后再对每一组的数据进行操作,这时需要用到分组查询

2.分组查询的语法

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

例如:计算每个部门的工资和?计算每个工作岗位的平均薪资?计算每个工作岗位的最高薪资?

3.关键字的执行顺序问题

select(4)...from(1)...where(2)...group by(3)...order by(5)...//顺序不能颠倒,需要记忆

4.(1)找出每个工作岗位的工资和

实现思路:先按照工作岗位进行分组,然后对工资求和

select sum(sal) as sumsal from emp group by job;

执行顺序:from emp表中查询数据,group by以job分组,最后对每一组数据进行sum求和输出

(2)找出每个工作部门,不同工作岗位的工资和

select deptno,job, max(sal) from emp group by deptno,job;//两个字段联合分组

5.!!!重要结论:

在一条select语句当中,如果有group by语句的话,select后面只能跟参加分组的字段和分组函数,其他的一律不能跟

例如:select ename,job,sum(sal) as sumsal from emp group by job;

可以跟分组数据job和分组函数sum(),但是不能跟ename,虽然在低版本MySQL中可以正常输出,但是这样写没有意义,并且在高版本MySQL和Oracle里面会报错误

6.找出每个部门最高工资>3000的

select deptno,max(sal) from emp group by deptno having max(sal) > 3000;//效率低

select deptno,max(sal) from emp where sal > 3000 group by deptno;//先用where过滤,再分组

优化策略:where和having优先选择where,where实在不能完成的,再选择having

注意:group by语句只能用在where之后,如果分组完之后需要对数据进行进一步的过滤需要使用having语句,having不能代替where,必须和group by同时使用

7.where没办法完成过滤的?

找出每个部门的平均薪资,要求显示平均薪资>2000

select avg(sal),deptno from emp group by deptno having avg(sal) > 2000;

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值