오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-08 04:42
관리 메뉴

우노

[Window Function] LeetCode 184번 “Department Highest Salary” 풀이 본문

SQL/Window Function

[Window Function] LeetCode 184번 “Department Highest Salary” 풀이

운호(Noah) 2022. 12. 11. 20:19

문제 링크

풀이

  • 각 부서에서 급여가 가장 높은 직원을 찾는 SQL 쿼리를 작성하면 됩니다.

  • Window Function과 JOIN을 사용해 해결할 수 있습니다.

  • 먼저, 아래와 같은 서브쿼리를 작성합니다.

      SELECT id, name, salary, departmentId,
              MAX(salary) OVER(PARTITION BY departmentId) AS max_salary
      FROM Employee
      | id | name  | salary | departmentId | max_salary |
      | -- | ----- | ------ | ------------ | ---------- |
      | 1  | Joe   | 70000  | 1            | 90000      |
      | 2  | Jim   | 90000  | 1            | 90000      |
      | 5  | Max   | 90000  | 1            | 90000      |
      | 3  | Henry | 80000  | 2            | 80000      |
      | 4  | Sam   | 60000  | 2            | 80000      |
  • 이후, 해당 서브쿼리 테이블과 Department를 JOIN한 뒤,

  • WHERE을 통해 salary와 max_salary가 같은 데이터들을 걸러내면 됩니다.

  • 전체 쿼리는 아래와 같습니다.

전체 쿼리

SELECT D.name AS Department, SUB.name AS Employee, SUB.max_salary AS Salary
FROM (
    SELECT id, name, salary, departmentId,
            MAX(salary) OVER(PARTITION BY departmentId) AS max_salary
    FROM Employee
) SUB
JOIN Department AS D
ON SUB.departmentId = D.id
WHERE SUB.salary = SUB.max_salary
Comments