MYSQL练习题(2)-- 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
2021/8/29 19:06:32
本文主要是介绍MYSQL练习题(2)-- 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
条件
员工表 -- employees
薪水表 -- salaries
要求
1、薪水第二名的员工
2、输出格式为emp_no、salary、last_name、first_name
3、不能使用order by
分析
根据要求1、3分析,得:
不能用order by的情况下可以通过两种方式去获取结果
1、最大值法:找出最大值的限制下再找出最大值,即使用两次max()
2、序号法:通过salaries表的自我对比,得到s1(s1<s2,即当s2存在时s1表里的值为次大值),最后通过限制s2值的数量n,找到第n+1的值(没有最小值)
根据要求2分析,得:
- emp_no -- 由employees表获得
- salary -- 由salaries获得
- last_name -- 由employees获得
- first_name -- 由employees获得
- 由于涉及多个表,需要用到join来匹配对应的值
做题
最大值法:
select em.emp_no, sa.salary, em.last_name, em.first_name
from employees as em join salaries as sa
on em.emp_no = sa.emp_no
and sa.salary =
( select max(salary) from salaries
where salary != (select max(salary) from salaries)
) ;
序号法:
select em.emp_no, sa.salary, em.last_name, em.first_name
from employees as em join salaries as sa
on em.emp_no = sa.emp_no
and sa.salary =
( select s1.salary from salaries as s1
join salaries as s2
on s1.salary < s2.salary //s1的值比s2的值小,当s2有2个值时,s1的值即为次大值
group by s1.salary
having count(distinct s2.salary ) = 1 //注意有多个最大值
) ;
获取当前薪水第二多的员工的emp_no以及其对应的薪水salary_牛客题霸_牛客网 (nowcoder.com)
这篇关于MYSQL练习题(2)-- 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程
- 2024-11-01部署MySQL集群学习:新手入门教程
- 2024-11-01部署MySQL集群入门:新手必读指南