최대 1 분 소요

문제 링크

정답

SELECT
    t1.name Department,
    t2.name Employee,
    t2.salary Salary
FROM Department t1
JOIN (
    SELECT departmentId, name, salary
    FROM (
        SELECT 
            departmentId, name, salary, 
            DENSE_RANK() OVER (PARTITION BY departmentId ORDER BY salary DESC) rank_
        FROM Employee
    ) t
    WHERE rank_ <= 3
) t2
ON t1.id = t2.departmentId

✅ Point

  • top three unique salaries per department 구하기
    • department 별로
    • 가장 높은 salary 를 가진
    • top 3 뽑기 (인원 3명 x, salary가 3개의 unique 한 값이 나오도록)
  • DENSE_RANK 로 중복값을 포함한 순위 표시
    • 해당 값 <=3 을 만족하면 위 top three unique 값을 만족