如何在SQL Server中的单个查询中查找所有第五高薪员工

时间:2011-05-04 14:21:39

标签: sql sql-server sql-server-2005

如何在SQL Server的单个查询中找到所有第五高薪员工

DECLARE @result bigint

SELECT TOP 5 @result = EmpID FROM Employees ORDER BY Salary DESC

SELECT @result

以上查询给出了第五个最高位置的正确记录, 但是我希望allfifth EmpID's Employees {{1}}。{/ p>

以上查询是从How to find fifth highest salary in a single query in SQL Server

引用的

4 个答案:

答案 0 :(得分:13)

在SQL Server 2005及更高版本中,您可以使用其中一个排名函数来实现此目的:

;WITH RankingEmployees AS
(
    SELECT 
       EmpID,
       DENSE_RANK() OVER(ORDER BY Salary DESC) 'SalaryRank'
    FROM dbo.Employees 
)
SELECT
   *
FROM
   RankingEmployees
WHERE
   SalaryRank = 5

使用DENSE_RANK将为所有具有相同薪水的员工提供相同的职级,例如你将获得第五高薪和所有有薪水的员工。

答案 1 :(得分:0)

SELECT * 
FROM (Select * From Employee Order By salary Desc)
WHERE ROWNUM <= 5;

内部查询,即Select * From Employee Order By salary Desc将返回Employee表格中的所有员工,并按DESCENDING列排序Salary

通过使用rownum,我们可以过滤前5个记录。

好的,我的qns出错了。以下查询会有效。

选择* 从        (选择ename,sal,        dense_rank()over(由sal desc命令)作为排名        来自emp) 等级&lt; 5 按等级排序;

答案 2 :(得分:0)

试试这样:

SELECT * 
  FROM EMPLOYEE AS EMP1
  WHERE 4 =
      (
       SELECT count(Distint(EMP2.SALARY)
         FROM EMPLOYEE AS EMP2
          WHERE EMP2.SALARY> EMP1.SALARY 
      )

答案 3 :(得分:-1)

DECLARE @result bigint

SELECT TOP 5 @result = EmpID 
FROM Employees 
ORDER BY Salary DESC

SELECT @result