SQL Server如何查询获取各部门薪资最高的员工姓名
你现有语句的问题在于:仅通过GROUP BY DeptName只能统计得到每个部门的最高薪资值,无法直接关联到对应该最高薪资的员工记录。因为在标准SQL语法中,SELECT后查询的非聚合字段必须是GROUP BY中声明的分组字段,你没有将EmpName加入分组或聚合逻辑,自然无法得到正确的员工姓名。
以下是SQL Server环境下的正确实现方案,使用窗口函数即可简洁实现需求:
WITH dept_sal_rank AS ( SELECT d.DeptName AS DepName, e.EmpName, -- 按部门分区,薪资倒序排序,排名第一的即为部门最高薪资员工 ROW_NUMBER() OVER(PARTITION BY d.DeptId ORDER BY s.Sal DESC) AS rank_num FROM department d INNER JOIN employee e ON d.DeptId = e.DeptId INNER JOIN salary s ON e.EmpId = s.EmpId ) SELECT DepName, EmpName FROM dept_sal_rank WHERE rank_num = 1
如果你的业务场景需要支持同部门多人薪资相同且同为最高时全部返回,只需把ROW_NUMBER()替换为RANK()即可。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

