홍동이의 성장일기
[LeetCode] 185. Department Top Three Salaries 본문
SELECT Department
, Employee
, Salary
FROM(
SELECT d.name as Department
, e.name as Employee
, e.salary as Salary
, dense_rank() over(partition by d.id order by e.salary DESC) as num
FROM employee e LEFT JOIN department d
ON e.departmentId = d.id
) AS salary_num
WHERE num <= 3
💡 문제 풀이
1. employee 테이블과 department 테이블을 JOIN한다.
2. 원하는 컬럼을 가져온다
3. 부서별로 salary가 큰 순서에 따라 순위를 매겨준다.
동일한 salary에 같은 순위를 주어야 한다 = rank / dense_rank
상위 3위까지만 불러와야 한다 = dense_rank
➡️ rank로 순위를 부여하게 된다면 예시에서 보여지는 Will에게 4등이 부여되기 때문에 조건을 충족하지 못하는 결과가 발생할 수 있다.
SELECT d.name as Department
, e.name as Employee
, e.salary as Salary
, dense_rank() over(partition by d.id order by e.salary DESC) as num
FROM employee e LEFT JOIN department d
ON e.departmentId = d.id
4. 위 쿼리를 서브쿼리 안에 넣어준다
5. WHERE절을 사용하여 순위가 3보다 작은 행들을 불러온다.
📍본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
728x90
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[LeetCode] 1321. Restaurant Growth (0) | 2023.08.24 |
---|---|
[LeetCode] 178. Rank Scores (0) | 2023.08.24 |
[LeetCode] 511. Game Play Analysis I (0) | 2023.08.22 |
[LeetCode] 180. Consecutive Numbers (0) | 2023.08.22 |
[MySQL] RegexOne 정규표현식 Lesson 1 ~5 예제 풀이 및 설명 (0) | 2023.08.21 |
Comments