我试图使用子查询和dense_rank方法从表中获得第九高的薪水。以下是每种方法的结果。
子查询方法:
select Top 1 Salary
from (
select top 7 Salary from Employee order by Salary desc
) as Result
order by Salary此方法返回的最高薪资为: 3000。
Dense_Rank方法:
select *
from (
select Salary, DENSE_RANK() Over(order by Salary desc) DRank
from Employee
) as Result
where DRank=7此方法返回的最高薪资为: 1000。
初始表数据:

有人能告诉我哪种方法是正确的吗?为什么?
发布于 2020-01-09 16:29:43
DENSE_RANK()不做你想做的事。它分配递增的数字,同时给予领带同样的等级。因此,可能有超过6份记录的薪水高于第七名的记录。
另一个查询为您提供了正确的结果,但可以使用OFFSET/FETCH语法进行简化,该语法自2012年版本以来可在Server中使用:
select * from employee order by salary offset 6 rows fetch next 1 row onlyhttps://stackoverflow.com/questions/59668239
复制相似问题