본문 바로가기
PROGRAMMING/LeetCode

[Leetcode] 185. Department Top Three Salaries_해설, 풀이, 설명

by HYUNHP 2023. 1. 28.
반응형

안녕하세요, HELLO

 

오늘은 Leetcode 알고리즘 문제 '185. Department Top Three Salaries'에 대해서 살펴보고자 합니다. 

 

알고리즘 문제, 코드, 해설 그리고 Leetcode에서 제공해 준 solution 순서대로 정리하였습니다.


STEP 1. 'Department Top Three Salaries' 알고리즘 문제

 

STEP 2. 'Department Top Three Salaries' 코드(code)

 

STEP 3. 'Department Top Three Salaries' 해설

 

STEP 4. 'Department Top Three Salaries' solution

 

반응형

 

STEP 1. 'Department Top Three Salaries' 알고리즘 문제

 

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 an SQL query to find the employees who are high earners in each of the departments.

 

Return the result table in any order.

 

회사의 임원들은 회사의 각 부서에서 누가 가장 많은 돈을 버는지 확인하고자 합니다. 이때, 한 부서의 고소득자는 해당 부서의 상위 3개에 해당하는 급여를 받는 직원입니다. 각 부서에서 고소득자인 직원을 찾기 위해 SQL 조회를 작성합니다.

출력 결과는 순서에 상관없습니다.

 

* 중요한 점은 상위 3개에 해당하는 급여를 받는 직원이 여러 명이 될 수 있는 점입니다. *

 


STEP 2. 'Department Top Three Salaries' 코드(code)

 

■ Runtime: 1779 ms

Beats: 22.41%

 

with E as (
SELECT
    name
    , salary
    , departmentId
    , dense_rank() over (partition by departmentId order by salary desc) rn
From
    Employee
)
SELECT 
    D.name as Department
    , E.name as Employee
    , E.salary as Salary
FROM E
INNER JOIN Department as D on d.id = E.departmentId
WHERE rn <= 3

 


STEP 3. 'Department Top Three Salaries' 해설

 

누적 순위를 나타내는 dense_rank 함수를 활용하여, 부서별 (departmentId) 급여 (salary)를 내림차순 (desc)으로 정렬합니다 (rn). 이를 with로 view로 만들어서, 부서명을 참조하는 Department 테이블과 Inner join으로 연결합니다.

 

중요한 점은 상위 3위 까지의 급여를 가져오기 위해, rn <= 3을 활용합니다.

 

728x90

 

STEP 4. 'Department Top Three Salaries' solution

 

추가적으로, Leetcode에서 제공해 준 solution 코드를 살펴보겠습니다.

 

■ Runtime: 2023 ms 

■ Beats: 13.88%

 

SELECT
    d.Name AS 'Department', e1.Name AS 'Employee', e1.Salary
FROM
    Employee e1
        JOIN
    Department d ON e1.DepartmentId = d.Id
WHERE
    3 > (SELECT
            COUNT(DISTINCT e2.Salary)
        FROM
            Employee e2
        WHERE
            e2.Salary > e1.Salary
                AND e1.DepartmentId = e2.DepartmentId
        )
;

 


■ 마무리

 

오늘은 Leetcode 알고리즘 문제 '185. Department Top Three Salaries'에 대해서 알아봤습니다.

좋아요와 댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

 

반응형

댓글