gpt4 book ai didi

sql - 如何在数据库Oracle中选择工资第二高的记录?

转载 作者:行者123 更新时间:2023-12-03 15:04:19 25 4
gpt4 key购买 nike

假设我有一个带有 id、user_name、salary 的员工表。如何在Oracle中选择工资第二高的记录?

我用谷歌搜索,找到这个解决方案,以下是正确的吗?:

select sal from
(select rownum n,a.* from
( select distinct sal from emp order by sal desc) a)
where n = 2;

最佳答案

已经建议了 RANK 和 DENSE_RANK - 根据您的要求,您还可以考虑 ROW_NUMBER():

select * from (
select e.*, row_number() over (order by sal desc) rn from emp e
)
where rn = 2;

RANK()、DENSE_RANK() 和 ROW_NUMBER() 之间的区别归结为:
  • ROW_NUMBER() 始终生成唯一的排名;如果 ORDER BY 子句不能区分两行,它仍然会给它们不同的排名(随机)
  • RANK() 和 DENSE_RANK() 将对 ORDER BY 子句无法区分的行给出相同的排名
  • DENSE_RANK() 将始终生成连续的排名序列 (1,2,3,...),而 RANK() 将在具有相同排名的两行或更多行后留下空白(想想“奥运会”:如果两名运动员获胜金牌,没有第二名,只有第三名)

  • 因此,如果您只想要一名员工(即使有几名员工的薪水位居第二),我建议您使用 ROW_NUMBER()。

    关于sql - 如何在数据库Oracle中选择工资第二高的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293298/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com