当 table 有重复的薪水时,使用子查询的第 n 个最高薪水和 dense_rank 不匹配

nth highest salary using subquery and dense_rank doesn't match when table has duplicate salaries

我试图使用子查询和 dense_rank 方法从 table 获得第 n 高的薪水。 以下是每种方法的结果。

子查询方法:

select Top 1 Salary 
from (
    select top 7 Salary from Employee order by Salary desc
) as Result
order by Salary

此方法returns第7高薪为:3000

Dense_Rank方法:

select * 
from (
    select Salary, DENSE_RANK() Over(order by Salary desc) DRank 
    from Employee
) as Result 
where DRank=7

此方法returns第7高薪为:1000

初始Table数据:

谁能告诉我哪种方法是正确的,为什么?

DENSE_RANK() 没有按照您的意愿进行。它分配递增的数字 ,同时给 ties 相同的排名。所以薪水高于排名第7的记录可能有6条以上

另一个查询为您提供了正确的结果,但可以通过使用 OFFSET/FETCH 语法来简化,该语法在 SQL Server 2012 版后可用:

select * from employee order by salary offset 6 rows fetch next 1 row only