MySQL练习题4-6
  FHVSBErvDkPx 2023年11月02日 46 0

不准用组函数(MAX),取得最高薪水(给出两种解决方案)和对应的员工姓名

方案一:按照薪水降序排列,取第一条记录

select ename,sal from emp order by sal desc limit 1;

第1步:select distinct ename,sal from emp; (当做临时表a)

第2步:select distinct ename,sal from emp; (当做临时表b)

第3步:将以上两个查询结果分别看成临时表a和临时表b,进行表连接,条件:a.sal < b.sal,其中有一个值不小于从任何一个值,该值即为最大值;

select ename, a.sal from emp a join emp b on a.sal < b.sal;

第4步:使用查询结果不在(NOT IN)以上查询结果中的即为最大值

select ename,sal from emp where sal not in (select distinct a.sal from emp a join emp b on a.sal < b.sal)


5、取得平均薪水最高的部门的部门编号

方案一:使用max函数

第1步:求每一个部门的平均薪水。

select deptNo,avg(sal) as avgsal from emp group by deptNo;

第2步:求部门平均薪水的最大值,使用Max函数。

select t.deptno,max(t.avgsal) as maxsal from (select deptNo,avg(sal) as avgsal from emp group by deptNo) t;

第3步:将“第1步”和“第2步”结果联合,条件:结果1的值 = 结果2的值

select deptno,round(avg(sal),4) as avgsal from emp group by deptNo having avgsal=(select max(t.avgsal)from (select round(avg(sal),4) as avgsal from emp group by deptNo) t);

取得平均薪水最高的部门的部门名称。

方案一:

#第1步:将每个部门的平均薪水降序排列,取第一条记录。 select deptNo,avg(sal)as avgsal from emp group by deptNo order by avgsal desc limit 1; #第2步:将“第1步”中的查询结果当做临时表t与部门信息表dept进行表连接,连接条件:t.deptno = d.deptno select t.deptno,dept.dName,t.avgsal from (select deptNo,avg(sal)as avgsal from emp group by deptNo order by avgsal desc limit 1) t join dept on t.deptno = dept.deptno;

方案二

select emp.deptNo,dept.dName,round(avg(sal),4) as avgsal from emp join dept on dept.deptno = emp.deptno group by deptNo having avgsal=(select max(t.avgsal) from(select round(avg(sal),4) as avgsal from emp group by deptNo) t);

#方案三:员工表与部门表连接,按部门名称分组

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: MySQL练习题7-9 下一篇: MySQL练习题1-3
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
FHVSBErvDkPx