每日一题-5(部门工资最高的员工)

题5:

根据下面两个表编写一个 SQL 查询,找出每个部门工资最高的员工。
在这里插入图片描述
在这里插入图片描述
方法一:窗口函数
用窗口函数解决分组和排序的问题
(1)因为涉及到两个表,根据题目要求使用left join连接两表
(2)用rank()函数根据部门分组和薪水降序排序

select Department, Employee, Salary
from 
(
select 
    b.Name as Department, 
    a.Name as Employee, 
    a.Salary as Salary, 
    rank() over(partition by b.Name order by a.Salary desc) as rank_
from Employee a left join Department b on a.DepartmentId = b.Id
) as t
where rank_ = 1;

方法二:
(1)用左连接连接两表
(2)找出每个部门内最高的工资作为子查询从而确定查询的条件

SELECT
    b.name AS Department,
    a.name AS Employee,
    Salary
FROM
    Employee as a 
        left join
    Department as b ON a.DepartmentId = b.Id
WHERE
    (a.DepartmentId , Salary) IN
    (   SELECT
            DepartmentId, MAX(Salary)
        FROM
            Employee
        GROUP BY DepartmentId
	)
;

猜你喜欢

转载自blog.csdn.net/Txixi/article/details/121205580