본문 바로가기
PROGRAMMING/LeetCode

[Leetcode] 184. Department Highest Salary_해설, 풀이, 설명

by HYUNHP 2023. 1. 21.
반응형

안녕하세요, HELLO

 

오늘은 Leetcode 알고리즘 문제 '184. Department Highest Salary'에 대해서 살펴보고자 합니다. 

 

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


STEP 1. 'Department Highest Salary' 알고리즘 문제

 

STEP 2. 'Department Highest Salary' 코드(code)

 

STEP 3. 'Department Highest Salary' 해설

 

STEP 4. 'Department Highest Salary' solution

 

반응형

 

STEP 1. 'Department Highest Salary' 알고리즘 문제

 

Write an SQL query to find employees who have the highest salary in each of the departments.

Return the result table in any order.

각 부서별로 최고 연봉을 받는 직원을 순서에 상관없이 반환하는 쿼리를 작성하세요

 

 

The query result format is in the following example.


STEP 2. 'Department Highest Salary' 코드(code)

 

■ Runtime: 772 ms

Beats: 53.35%

 

SELECT d.name as Department, e.name as Employee, e.salary as Salary
FROM Employee e
Inner join Department d on d.id = e.departmentId
WHERE 
    (e.salary, e.departmentId) = any(
    SELECT max(e1.salary), e1.departmentId
    FROM Employee e1
    GROUP BY e1.departmentId
    )

STEP 3. 'Department Highest Salary' 해설

 

각 부서별로 최고 연봉과 그 해당 부서를 조건 (max(salary), departmentId)으로 설정하고, 이에 해당하는 담당자를 반환하는 방식으로 쿼리를 작성했습니다. equal any 조건으로 진행하다 보니, runtime이 늦어진 한계점이 있었습니다.

 

leetcode에서 제공한 해설을 보니, 조건은 동일하지만 in 을 통해, runtime을 단축하였습니다.  

 

728x90

 

STEP 4. 'Department Highest Salary' solution

 

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

 

■ Runtime: 914 ms

Beats: 39.76%

 

SELECT
    d.name as "Department",
    e.name as "Employee",
    e.salary as "Salary"
FROM
    Employee as e
LEFT JOIN Department as d on d.id = e.departmentId
WHERE
    (departmentId, salary) in
    (
        SELECT departmentId, max(salary)
        FROM Employee 
        GROUP BY departmentId
    )
;

■ 마무리

 

오늘은 Leetcode 알고리즘 문제 '184. Department Highest Salary'에 대해서 알아봤습니다.

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

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

감사합니다.

반응형

댓글