홍동이의 성장일기

[LeetCode] 185. Department Top Three Salaries 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 185. Department Top Three Salaries

홍동2 2023. 8. 23. 18:14

 

Department Top Three Salaries - LeetCode

Can you solve this real interview question? Department Top Three Salaries - Table: Employee +--------------+---------+ | Column Name | Type | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------

leetcode.com

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
Comments