[MySQL] 그룹별 최고 금액 보유자 뽑기

테이블과 결과

Input: 
Employee table:
+----+-------+--------+--------------+
| id | name  | salary | departmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
Department table:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+
Output: 
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+
Explanation: Max and Jim both have the highest salary in the IT department and Henry has the highest salary in the Sales department.

문제

  • Write an SQL query to find employees who have the highest salary in each of the departments.

SELECT 
    t1.Department
    ,t1.Employee
    ,t1.Salary
FROM 
(
    SELECT 
        d.name AS 'Department'
        ,e.name AS 'Employee'
        ,e.salary AS 'Salary'
        ,FIRST_VALUE(e.salary) OVER(PARTITION BY d.id ORDER BY e.salary DESC) AS 'deptTopSalary'
    FROM Employee e 
    JOIN Department d ON e.departmentId = d.id
) AS t1 
WHERE t1.Salary = t1.deptTopSalary
;

links

social