728x90
📚문제
📝풀이
# 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