如何在SQL Server的单个查询中找到所有第五高薪员工
DECLARE @result bigint
SELECT TOP 5 @result = EmpID FROM Employees ORDER BY Salary DESC
SELECT @result
以上查询给出了第五个最高位置的正确记录,
但是我希望all
表fifth
EmpID's
Employees
{{1}}。{/ p>
以上查询是从How to find fifth highest salary in a single query in SQL Server
引用的答案 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