找出第N个最高薪水的有效查询是什么

时间:2014-03-06 10:04:26

标签: sql oracle

我只是一个初学者.. 我知道SQL查询以找出第三高薪或第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 );

任何提示?

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

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

如果你在Salary

上有一个索引,那么从性能pov开始就会有所帮助

<强>更新 由于mysql标记已消失,您可以使用 mhasan ROWNUM

提到的oracle替代方案

答案 1 :(得分:0)

您可以使用ROW_NUMBER()分析功能根据工资进行排名。 假设你想要第5个最高薪水

Select * From

(

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

Where  z.rnkSalary=5