문제 출처: https://leetcode.com/problems/department-highest-salary/
문제: 각 부서에서 가장 높은 급여를 받는 사람의 소속 부서, 이름, 급여 금액을 찾아라
풀이:
먼저 각 부서별로 가장 높은 급여를 찾는다.
SELECT departmentID
, MAX(salary) AS Salary
FROM Employee
GROUP BY departmentID
결과
| departmentID | Salary |
| ------------ | ------ |
| 1 | 90000 |
| 2 | 80000 |
그 다음, 위 결과에 부합하는(해당 부서에서 가장 높은 급여를 받는) 사람을 추출해야 한다.
그렇게 하기 위해서는
위 결과를 테이블 처럼 사용할 수 있게 서브쿼리로 가져와서 Employee 테이블과 이너조인을 하면 된다.
이때 이너조인을 하는 기준은 departmenId와 salary다.
이너조인을 하면 두 개의 테이블에서 기준 값이 서로 일치하는 데이터만 남기 때문에
조건을 만족하는 사람을 추출할 수 있다!
그리고 이때 서브쿼리에 별칭도 달아주어야 한다!
안 달면
Every derived table must have its own alias.
라는 에러가 난다
그렇게 서브쿼리와 이너조인 하기
SELECT *
FROM Employee AS e
INNER JOIN(
SELECT departmentId
, MAX(salary) AS Salary
FROM Employee
GROUP BY departmentId
) AS hs -- alias 필수
ON e.departmentId = hs.departmnedId
결과
| id | name | salary | departmentId | departmentId | Salary |
| -- | ----- | ------ | ------------ | ------------ | ------ |
| 2 | Jim | 90000 | 1 | 1 | 90000 |
| 3 | Henry | 80000 | 2 | 2 | 80000 |
| 5 | Max | 90000 | 1 | 1 | 90000 |
서브쿼리 테이블과 departmentId와 salary가 일치하는 employee 데이터만 남았다.
이제 최종 아웃풋에서 원하는 모양으로 바꿔주면 된다.
departmentid에 상응하는 부서 이름을 가져오기 위해 department 테이블을 이너조인 해주고,
원하는 컬럼만 가져오면 된다.
SELECT d.name AS Department
, e.name AS Employee
, hs. Salary
FROM Employee AS e
INNER JOIN(
SELECT departmentId
, MAX(salary) AS Salary
FROM Employee
GROUP BY departmentId
) AS hs ON e.departmentId = hs.departmentId
AND e.salary = hs.Salary
INNER JOIN Department AS d ON d.id = e.departmentId
짠
최종 결과
| Department | Employee | Salary |
| ---------- | -------- | ------ |
| IT | Jim | 90000 |
| Sales | Henry | 80000 |
| IT | Max | 90000 |
본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
'SQL > LeetCode&HackerRank' 카테고리의 다른 글
[MySQL] LeetCode 180 - Consecutive Numbers 풀이 3가지 (Join, Lead, Leg) (0) | 2023.05.12 |
---|---|
[MySQL] HackerRank - Challenges 풀이 (0) | 2023.03.23 |
[MySQL] HackerRank - Top Earners 풀이 3가지 (0) | 2023.01.04 |
[MySQL] Leetcode 196 - DELETE문을 사용하여 중복값 삭제하기 (1) | 2022.12.21 |
[MySQL] Leetcode 627 - UDATE문을 사용하여 성별 전환하기 (0) | 2022.12.19 |