본문 바로가기

SQL/LeetCode

LeetCode / 185. Department Top Three Salaries / MySQL / Hard

728x90

📚문제

출처 : LeetCode(https://leetcode.com/problems/department-top-three-salaries/)


📝풀이

# Write your MySQL query statement below
SELECT Department
     , Employee
     , Salary
FROM (SELECT d.name AS Department
           , e.name AS Employee
           , e.salary AS Salary
           , DENSE_RANK() OVER(PARTITION BY d.name ORDER BY e.salary DESC) AS rnk
      FROM Employee e
      JOIN Department d ON e.departmentId = d.id) rnk_etc
WHERE rnk <= 3

Hard 난이도 문제인데

오히려 Medium 문제들 보다 쉬웠던 것 같다..!

 

다만 한가지 신경써야할 부분은 

Salary가 동일할 경우 같은 순위를 매겨주어야 해서

ROW_NUMBER() 가 아닌 DENSE_RANK() 함수 사용


ROW_NUMBER() 

- 각 행에 대해서 윈도우 내에 유일한 정수 값 할당

- 동일 값 가진 행에 대해서 다른 순위 부여

 

DENSE_RANK()

- 윈도우 내에 정수 값 할당

- 동일 값 가진 행에 대해서 동일한 순위 부여


 

+ 코드를 제출해 봤는데 Accepted라고 뜨긴 하는데 Expected과 Output의 값의 순서가 전혀 다르다..(정렬 조건도 없음)

어쨌든 문제 Example에서 나온 예시값과는 동일하니까 그냥 Submit 했더니 정답처리가 됐다 ⭕

 

728x90