본문 바로가기

CODING TEST/SQL - 문제

[LEETCODE] 184. Department Highest Salary - MySQL 풀이

Department Highest Salary - LeetCode

 

Department Highest Salary - LeetCode

Department Highest Salary - Table: Employee +--------------+---------+ | Column Name | Type | +--------------+---------+ | id | int | | name | varchar | | salary | int | | departmentId | int | +--------------+---------+ id is the primary key column for thi

leetcode.com

 

문제요약

부서 내 SALARY가 가장 높은 사람을 출력하라.

부서 내 SALARY가 가장 높은 사람이 여러명일 경우에는 모두 출력한다.

 

 

문제풀이

SELECT d.name AS Department
        , e.name AS Employee
        , Salary
FROM Employee e INNER JOIN Department d ON e.departmentID = d.id
WHERE (e.departmentId, Salary) IN
        (SELECT departmentId, MAX(Salary)
         FROM Employee
         GROUP BY departmentId)

 

WHERE절 서브쿼리를 사용할 수 있다.

Employee 테이블에서 departmentId를 기준으로 GROUP BY를 수행하여 연봉이 가장 높은 departmentId와 연봉을 찾는다. Employee와 Department이 JOIN된 테이블에서 WHERE절 서브쿼리로 뽑은 departmentId와 연봉에 해당하는 것이 반환된다. (이 때, name은 고려사항이 아니다. WHERE절 서브쿼리에서 알 수 있는 것은 00부서에서 가장 큰 SALARY는 00[값]이다.)

FROM절에서 Employee와 Department 테이블을 JOIN해준다. 즉, JOIN된 테이블에서 반환된 departmentId와 연봉에 해당하는 행이 선택되게 된다.