如何在Oracle SQL中获取第5、6、7高的薪资?
修改后的查询语句
select * from ( select first_name, salary, dense_rank() over (order by salary desc) r from emp ) t where r in (5, 6, 7);
说明
你原查询已经通过dense_rank()实现了按薪资倒序排名,要一次性获取第5、6、7高的薪资,只需把筛选条件从r = 3改成r in (5,6,7)即可。in操作符可以匹配多个指定的排名值,这样就能在一个查询里返回这三个排名对应的所有员工姓名和薪资。
如果存在多名员工薪资相同且排名落在5-7区间的情况,dense_rank()会将他们都返回,这和你原查询的逻辑保持一致。要是你需要严格的“第N个位置”(即使薪资相同也只取对应位置的单条记录),可以把dense_rank()替换成row_number(),但前者更适合处理薪资并列的场景。
内容的提问来源于stack exchange,提问作者vilas patil
相关产品推荐
相关产品推荐

