데이터 분석

185. Department Top Three Salaries | Hard 본문

SQL/leetcode

185. Department Top Three Salaries | Hard

딱한아이 2025. 2. 1. 17:29
문제

 

A company's executives are interested in seeing who earns the most money in each of the company's departments. A high earner in a department is an employee who has a salary in the top three unique salaries for that department.

Write a solution to find the employees who are high earners in each of the departments.

테이블 정보
예시

 

각 부서마다 top 3에 해당하는 급여를 받는 직원의 부서명, 이름, 급여를 조회하는 문제이다.

단, 같은 급여가 반복되더라도 한 번만 계산해야 한다.

 

따라서 RANK() 함수가 아닌 DENSE_RANK() 함수를 사용하는 것이 적절하다.

 

Solution
WITH high_earner AS (
    SELECT *
         , DENSE_RANK() OVER (PARTITION BY departmentID ORDER BY salary DESC) AS dense_rk
    FROM Employee
)
SELECT d.name AS Department
     , h.name AS Employee
     , h.salary AS Salary
FROM high_earner h
JOIN Department d ON h.departmentID = d.id
WHERE h.dense_rk <= 3

 

☞ high_earner CTE:

✔️ 각 부서 내에서 급여를 기준으로 내림차순 정렬하여 순위를 부여한다.

✔️ 동일한 급여에 대해 동일한 순위를 부여하며, 다음 순위를 건너뛰지 않는다.

 

☞메인 쿼리:

✔️ 부서명 정보가 필요하여 Department 테이블과 조인한다.

✔️ 각 부서별로 상위 3위에 해당하는 직원만 필터링한다. 

'SQL > leetcode' 카테고리의 다른 글

1321. Restaurant Growth | Medium 🔥  (1) 2025.02.01
178. Rank Scores | Medium  (0) 2025.02.01
180. Consecutive Numbers | Medium  (1) 2025.01.24
511. Game Play Analysys Ι | Easy  (0) 2025.01.24
1084. Sales Analysis III | Easy  (0) 2025.01.21