题解 | 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

#   请你获取薪水第二多的员工的emp_no以及其对应的薪水salary,
#   若有多个员工的薪水为第二多的薪水,则将对应的员工的emp_no和salary全部输出,并按emp_no升序排序。
#   思路1:先denes_rank(),然后筛选(用from的子查询),注意做当前日期筛查。;拓展:rank()跳跃式排序(高考总分排名1134);denes_rank()并列连续排序(1123);row_number()连续型排序(如1234)
select emp_no, salary
from(select *, dense_rank()over(order by salary desc) rk from salaries where to_date = '9999-01-01' ) as posn
where posn.rk = 2
order by emp_no



#   思路2:distinct(用group by 去重也可以),然后order by,最后limit 1,1,最后筛选(用where的子查询)。注意做2次当前日期筛查(如果salaries表中有其他年份日期的薪水,排序后恰好是第2名,且当前年份日期的薪水和前面的第2名刚好相等。)
/*
select emp_no, salary
from salaries
where salary = (select distinct salary from salaries order by salary desc limit 1,1  where to_date = '9999-01-01') and to_date = '9999-01-01'
order by emp_no
*/

全部评论

相关推荐

程序员小白条:找实习多投就行,但25届现在是春招时间呃呃呃,你想以后参加社招吗
点赞 评论 收藏
分享
03-04 19:02
云南大学 Java
Yki_:没挂,只是没人捞,该干啥干啥,等着就好了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务