如何在SQL Server中查询表内第三高薪资及对应员工姓名
实现方案
你原有逻辑已经可以正确获取去重后的第三高薪资,只需要将该查询结果作为过滤条件匹配原表即可获取对应员工信息,以下是两种实现方式:
方案1:基于原有代码修改(改动最小)
直接把已有的薪资查询作为子查询,外层匹配原员工表:
SELECT CONCAT(FirstName, ' ', LastName) AS EmployeeName, Salary AS ThirdHighestSalary FROM tbl_Employees WHERE Salary = ( SELECT MIN(Salary) FROM (SELECT DISTINCT TOP 3 Salary FROM tbl_Employees ORDER BY Salary DESC) AS a )
方案2:使用DENSE_RANK窗口函数(更灵活通用)
如果需要经常查询不同排名的薪资,更推荐用窗口函数实现,逻辑更直观,也能很好处理薪资并列的场景:
WITH SalaryRankCTE AS( SELECT CONCAT(FirstName, ' ', LastName) AS EmployeeName, Salary, -- 薪资从高到低排名,并列薪资排名相同,不跳号 DENSE_RANK() OVER(ORDER BY Salary DESC) AS RankNum FROM tbl_Employees ) SELECT EmployeeName, Salary AS ThirdHighestSalary FROM SalaryRankCTE WHERE RankNum = 3
查询结果说明
基于你提供的测试数据,两种方案执行后返回结果一致:
| 员工姓名 | 第三高薪资 |
|---|---|
| Mitu Pradhan | 55000 |
| Dibas Hembram | 55000 |
内容的提问来源于stack exchange,提问作者Chitransh Mathur
相关产品推荐
相关产品推荐

