在oracle中,以下查询可以获得第三高薪。
select empname, salary
from (select empname,salary from employee order by salary desc)
where rownum==3
我在其他线程中看到了答案,但它们似乎很复杂。如果上面的查询工作,那么它是oracle
的简单解决方案SQLServer的查询是什么?
我没有Oracle和SQLServer软件来试用这些查询。
请告诉我
答案 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()
是这个问题的合适答案。
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;