是否有任何预定义的函数或方法可用于从员工表中获取第二高的薪水?
最佳答案
这样做的方法是使用 Oracle 的分析功能。您的特定场景只是我在 another thread 中提供的解决方案的一个变体。
如果您只想选择第二高的薪水,那么 DENSE_RANK()、RANK() 和 ROW_NUMBER() 中的任何一个都可以解决问题:
SQL> select * from
2 ( select sal
3 , rank() over (order by sal desc) as rnk
4 from
5 ( select distinct sal
6 from emp )
7 )
8 where rnk = 2
9 /
SAL RNK
---------- ----------
3000 2
SQL>
但是,如果要选择附加信息,例如工资第二高的员工姓名,则选择的函数会影响结果。选择一个而不是另一个的主要原因是当有平局时会发生什么。
如果您使用 ROW_NUMBER() 它将返回按薪水排序的第二个员工:如果有两个员工并列最高薪水怎么办?如果有两名员工并列第二高的工资怎么办?如果您使用 RANK() 并且有两名员工并列第一高薪,则不会有 RANK = 2 的记录。
我建议 DENSE_RANK() 通常是在这些情况下选择的最安全的函数,但它确实取决于特定的业务需求。
关于sql - 如何找到工资第二高的员工?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491063/