2011-05-20 72 views
0

如何在MS SQL中不使用任何子查询找到第N个最高工资?SQL查询找到第N个最高工资

+2

问题是模糊的。发布您的表架构。 – 2011-05-20 10:45:12

+0

如果两个人在第N点附近有相同的工资,该怎么办?例如:这个有序列表中的第四项应该是什么? 10 9 8 8 8 7 7 7 6 5 – 2011-05-20 10:51:06

+0

@fearofawhackplanet true,但您链接到的问题没有指定SQL Server的版本(注释除外),因此答案不会使用潜在的更高效/更清晰的窗口函数自SQL Server 2005起可用。 – 2011-05-20 10:58:43

回答

7
;WITH cte1 
AS 
(
    SELECT ROW_NUMBER() OVER(ORDER BY SALARY DESC) AS RN, * FROM Salaries 
) 
SELECT * 
FROM cte1 
WHERE RN = 5 <-- Nth highest 
+2

'ROW_NUMBER()'可能不是这里想要的。取决于需求,RANK()或DENSE_RANK()可能更合适。 – 2011-05-20 10:56:37

+0

DENSE_RANK(),在我的情况下给出2行。那么我应该在这种情况下明确吗? – 2011-05-20 11:01:29

+2

@Xor这取决于你的要求,你想看看如果两个人在第N点附近有相同的薪水,你会得到什么结果? – 2011-05-20 11:04:56