分组查询知识

本文详细介绍了SQL中的分组查询语法,通过实例展示了如何计算每个部门的工资和、每个工作岗位的工资总和,以及如何利用HAVING子句进行更复杂的过滤条件设置。同时,讲解了WHERE和HAVING的使用区别,并给出了一些高级查询示例,如找出每个部门平均薪资高于特定值的情况以及特定岗位之外的平均薪资等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分组查询

在实际的运用中,需要先进行分组,然后对每一组的数据进行操作,这时候需要分组查询

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

eg:比如计算每个部门的工资和

找出每个工作岗位的工资和?

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

select job,sum(sal) from emp group by job;

​ 执行顺序:先从emp中查询数据;然后对job进行分组;然后对每一组数据进行求和
重点结论:在一条sql语句中,如果含有group by语句,select只能跟:参加分组的字段,以及分 组函数;其他的一律不能跟

找出每个部门的最高薪资
select deptno,max(sal) from emp group by deptno;
找出每个部门,不同工作岗位的最高薪资
select max(sal) from emp group by deptno,job;
/**按照两个字段进行分组**/
找出每个部门最高薪资,要求显示最高薪资大于3000的
select max(sal) from emp where sal>3000 group by deptno;
or
select max(sal) from emp group by deptno having max(sal)>3000;//效率低
/**可以用having来再次过滤,having必须和group by一起使用
如果where和having都可以实现,则优先使用where**/
找出每个部门平均薪资,要求显示平均薪资高于2500的
select avg(sal) from emp group by deptno having avg(sal)>2500;
/**这个只能用having实现,where不能实现,因为分组函数avg不能写在where里**/
找出每个岗位的平均薪资,要求显示平均薪资大于1500,除了MANAGER之外,要求按照平均薪资降序排列
select avg(sal) from emp where job!='MANAGER' group by job having avg(sal)>1500 order by avg(sal) desc;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值