문제
💡 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.
Return the result table in any order.
테이블 형태
풀이
SELECT Department, Employee, Salary
FROM(
SELECT DENSE_RANK() OVER (PARTITION BY e.departmentId ORDER BY salary DESC) row_n
, e.name AS Employee
, salary AS Salary
, d.name AS Department
FROM Employee e
LEFT JOIN Department d ON e.departmentId=d.id
) salary_rank
WHERE row_n <= 3
해설
FROM(
SELECT DENSE_RANK() OVER (PARTITION BY e.departmentId ORDER BY salary DESC) row_n
, e.name AS Employee
, salary AS Salary
, d.name AS Department
FROM Employee e
LEFT JOIN Department d ON e.departmentId=d.id
) salary_rank
- 부서별로 가장 고연봉인 탑3를 출력하는 문제다
- 먼저 부서명과 직원 이름을 함께 출력해주기 위해 Employee(e) 테이블을 기준으로 Department 테이블(d)을 LEFT JOIN한다. 쿼리를 짤 때는 직원 데이터가 소실되는 상황을 방지하기 위해 LEFT JOIN을 썼지만, 부서명이 출력되지 않으면 정답 테이블과 형식이 달라지게 되기 때문에 INNER JOIN으로 해도 무방하다(실제 제출 결과 통과)
- 같은 연봉이면 모두 출력해줘야 하므로 같은 값에 동일 순위를 부여하고 빈틈없이 순서를 매기는 DENSE_RANK를 사용해야 한다(leetcode 511. Game Play Analysis1 풀이 중 RANK, DENSE_RANK, ROW_NUMBER 차이 참고). departmentId를 기준으로 파티션(그룹)을 나누고 salary로 내림차순 정렬해 DENSE_RANK로 순위를 부여한다
[leetcode / MySQL] 511. Game Play Analysis1
문제 💡 Write a solution to find the first login date for each player. Return the result table in any order. 테이블 형태 풀이 SELECT player_id, first_login FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY player_id ORDER BY event_date) AS row_n , p
hei-ground.tistory.com
- 출력 결과의 컬럼명에 맞게 AS를 지정해준다
SELECT Department, Employee, Salary
...
WHERE row_n <= 3
- 앞서 DENSE_RANK로 같은 연봉에 동일 순위를 부여해 빈틈없이 순위를 매겼고, 문제는 고연봉인 탑3를 출력하라고 하였으므로 랭킹이 ≤3인 모든 값을 출력해준다
'SQL > 코딩테스트' 카테고리의 다른 글
[프로그래머스 / MySQL] 평균 일일 대여 요금 구하기 (0) | 2024.02.02 |
---|---|
[프로그래머스 / MySQL] 이름이 있는 동물의 ID (0) | 2024.02.02 |
[leetcode / MySQL] 178. Rank Scores (0) | 2024.02.01 |
[leetcode / MySQL] 511. Game Play Analysis1 (2) | 2024.02.01 |
[프로그래머스 / MySQL] 오랜 기간 보호한 동물(1) (0) | 2024.02.01 |