데이터 분석

184. Department Highest Salary | Medium📌 본문

SQL/leetcode

184. Department Highest Salary | Medium📌

딱한아이 2025. 1. 10. 18:49
문제

 

Write a solution to find employees who have the highest salary in each of the departments.

Return the result table in any order.

테이블 정보
예시

 

부서별 최고 급여를 갖는 직원의 부서명, 이름, 급여를 조회하는 문제이다.

📢동일한 최고 급여를 가진 경우 모두 출력해야 하기 때문에 순위함수 중 ROW_NUMBER 함수는 사용해서는 안 된다. 

 

Solution

 

✅ WHERE절 다중 컬럼 서브쿼리를 활용

WITH highest AS (
    SELECT departmentID
         , MAX(salary)
    FROM Employee
    GROUP BY departmentID
)
SELECT d.name AS Department
     , e.name AS Employee
     , e.salary AS Salary
    FROM Employee e
        JOIN Department d ON e.departmentID = d.id
    WHERE (e.departmentID, e.salary) IN (SELECT * FROM highest)

 

☞ highest CTE:

집계함수와 GROUP BY를 활용하여 부서별 최고 급여를 계산하는 임시 테이블을 생성

 

☞ 최종 SELECT:

WHERE절에 다중 컬럼 비교를 통해 조건을 만족하는 행만 필터링

이때 IN 연산자는 서브쿼리 결과와 튜플 단위로 비교한다. 

 

✅ RANK() 함수와 윈도우 함수를 활용

WITH highest AS (
    SELECT *
        , RANK() OVER (PARTITION BY departmentID ORDER BY salary DESC) AS rk -- DENSE_RANK 도 가능
    FROM Employee
)
SELECT d.name AS Department
     , h.name AS Employee
     , h.salary AS Salary
FROM highest h
    JOIN Department d ON h.departmentID = d.id
WHERE h.rk = 1