DQL:group by和having子句

本文介绍了如何使用SQL查询语句统计各部门和岗位的平均薪资,包括只显示平均工资2000以上的部门,排除manager岗位的薪资统计,以及人数小于4的部门平均工资,以及排除最高工资小于3000的部门。强调了WHERE子句与HAVING子句的区别以及在SQL查询中的应用顺序。
摘要由CSDN通过智能技术生成

练习一:统计各个部门的平均工资,且只显示2000以上的

方法一:使用group by

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

在这里插入图片描述

方法二:使用where子句(不可取,错误的方法,因为where中不能使用多行函数

select  deptno,avg(sal) ,count(1),max(sal)
from emp  
where avg(age)>2000 -- 错!!!!!!  where子句中不可以使用多行函数
group by deptno
order by max(sal);

练习二:统计各个岗位的平均薪资,除了manager

方法一:

select avg(sal) ,job 
from emp
where job!="manager"
group by job
order by avg(sal) desc

方法二:

 select job ,avg(sal)
 from  emp
 group by job
 having job!="manager"
 order by avg(sal) 

在这里插入图片描述
练习三:统计[人数小于4的]部门的平均工资

select count(1),deptno,avg(sal)
from emp
group by deptno
having count(1)<4
order by count(1) desc

在这里插入图片描述
练习四:统计各部门的最高工资,排除最高工资小于3000的部门。

select max(sal),deptno
from emp
group by deptno
having max(sal)>=3000
order by max(sal) desc

在这里插入图片描述

注意事项

1.如果没有GROUP BY子句,SELECT列表中不允许出现字段(单行函数)与多行函数混用的情况
2.不允许在WHERE 子句中使用多行函数
3.where子句和having子句联系和区别
联系: 都是筛选记录
区别:where不能出现多行函数,having中可以出现多行函数
4.select语句的执行顺序:from–where – group by– select - having- order by
5.问题:为什么where子句中不可以使用使用多行函数
回答:group by之前的子句不可以使用,group by之后的语句可以使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值