2011-05-20 102 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