Oracle和SQL服务器中的SQL查询获得第3高工资

时间:2014-11-15 17:22:41

标签: sql sql-server oracle

在oracle中,以下查询可以获得第三高薪。

select empname, salary 
from (select empname,salary from employee order by salary desc) 
where rownum==3

我在其他线程中看到了答案,但它们似乎很复杂。如果上面的查询工作,那么它是oracle

的简单解决方案

SQLServer的查询是什么?

我没有Oracle和SQLServer软件来试用这些查询。

请告诉我

3 个答案:

答案 0 :(得分:1)

Dense_Rank()中使用SQL SERVER排名功能查找第三高薪。

Row_number()返回结果集分区中行的序号,从1开始,每个分区的第一行。ORDER BY子句确定分配行的顺序他们独特的ROW_NUMBER

SELECT empname, 
       salary 
FROM   (SELECT Dense_Rank() OVER(ORDER BY salary DESC) rn, 
               empname, 
               salary 
        FROM   employee) A 
WHERE  rn = 3

答案 1 :(得分:1)

对于SQL Server,解决方案如下:

Select TOP 1 Salary as '3rd Highest Salary'
from (SELECT DISTINCT TOP 3 Salary from Employee ORDER BY Salary DESC)
a ORDER BY Salary ASC 

答案 2 :(得分:0)

我做了一些探索,发现下面的链接解释了row_number()rank()dense_rank()之间的区别。从下面的链接中我发现dense_rank()是这个问题的合适答案。

http://www.dwbiconcepts.com/tutorial/24-interview-questions/190-top-20-sql-interview-questions-with-answers.html

如果两个或更多的雇员有相同的工资,

row_number()不会给出预期的结果。

http://sqlfiddle.com/上尝试时,以下查询适用于Oracle和SQL Server。以下查询为您提供薪水第三高的员工列表

SELECT empname, salary FROM (SELECT empname, salary, dense_rank() over(order by salary desc) dense_rank_by_sal
FROM EMPLOYEE ) A  where dense_rank_by_sal=3;