我试图使用子查询和dense_rank方法从表中获取第n最高的薪水。 以下是每种方法的结果。
子查询方法:
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
初始表数据:
谁能告诉我哪种方法是正确的以及为什么?
最佳答案
DENSE_RANK()
不执行您想要的操作。它分配递增的数字,同时给平局赋予相同的排名。因此可能有超过 6 条记录的薪资高于排名第 7 的记录。
另一个查询为您提供了正确的结果,但可以通过使用 OFFSET/FETCH
语法进行简化,该语法自 2012 版以来在 SQL Server 中可用:
select * from employee order by salary offset 6 rows fetch next 1 row only
关于sql - 当表有重复工资时,使用子查询和密集排名的第 n 个最高工资不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59668239/