2014-03-06 88 views
-2

我只是一個初學者.. 我知道SQL查詢查找第三最高薪水或第n個最高工資。但我需要一個有效的查詢。什麼是查找第N個最高工資的高效查詢

這些是我知道..能否請您提出任何其他查詢,而不是這些查詢..

該查詢效率不高,按我的學科教師

SELECT * 
FROM Employee Emp1 
WHERE (N-1) = (
       SELECT COUNT(DISTINCT(Emp2.Salary)) 
       FROM Employee Emp2 
       WHERE Emp2.Salary > Emp1.Salary 
       ); 

而這顯然查詢效率不高

SELECT MAX(Salary) 
FROM Employee 
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee); 

任何提示?

+1

這是MySQL或Oracle數據庫嗎? – Mureinik

+0

假設有'1 1 1 1 1 2 3'條目。哪一個會是第三名? – zerkms

+0

你爲什麼標記MySQL和Oracle? 'DENSE_RANK'或'ROW_NUMBER'可能是最有效的方式,但MySQL不支持這一點。 –

回答

0

你可以試試這個:

SELECT 
    * 
FROM 
    Employee 
ORDER BY 
    Salary DESC 
LIMIT N,1 

而且從性能POV這將真正幫助,如果您對Salary列的索引

UPDATE: 因爲mysql標籤了以後,你可以使用oracle備選方案也提到了mhasanROWNUM

+0

它是oracle .... – zerkms

+0

@zerkms我看到了mysql標籤...現在它已經不存在了...... thx – Stephan

0

你可以根據工資使用ROW_NUMBER()分析函數進行排序。 假設你想要第五最高工資

Select * From 

(

Select col1,col2, 
     row_number() over(order by salary desc) as rnkSalary 
From employees 
)z 

Where z.rnkSalary=5