개발은 처음이라 개발새발

JOIN 서브쿼리 퀴즈[LeetCode] 본문

mysql

JOIN 서브쿼리 퀴즈[LeetCode]

leon_choi 2023. 6. 7. 09:00
반응형

https://leetcode.com/problems/department-highest-salary/

 

Department Highest Salary - LeetCode

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

leetcode.com

Input: 
Employee table:
+----+-------+--------+--------------+
| id | name  | salary | departmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 70000  | 1            |
| 2  | Jim   | 90000  | 1            |
| 3  | Henry | 80000  | 2            |
| 4  | Sam   | 60000  | 2            |
| 5  | Max   | 90000  | 1            |
+----+-------+--------+--------------+
Department table:
+----+-------+
| id | name  |
+----+-------+
| 1  | IT    |
| 2  | Sales |
+----+-------+
Output: 
+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
+------------+----------+--------+

예제 테이블을 살펴보면, employee와 department 테이블이 있고 이 두가지를 합해서 각부서의 이름과, 직원, 샐러리를 보여주는 것인데 salary를 보니 각 부서의 가장 높은 연봉인걸 확인할 수 있습니다. 결국 각부석의 가장 높은 샐러리를 받는 사람의 부서명, 이름, 샐러리를 구해야 합니다.  이를 구하기 위해서 우선적으로 departmentid별 가장 높은 샐러리를 구해야 합니다. 

SELECT departmentid, MAX(salary)
FROM Employee
GROUP BY departmentid
____________________________________________________
output:
| departmentid | MAX(salary) |
| ------------ | ----------- |
| 1            | 90000       |
| 2            | 80000       |

네 이렇게 부서id별 가장 높은 샐러리를 구했다면 이를 활용해야 겠죠? 이 구문을 테이블처럼 활용해 join을 해보려고 합니다. 그리고 부서명이 필요하기 때문에 Department 테이블 역시 join을 답을 구해보겠습니다. 

SELECT D.name as Department, E.name as Employee, DH.max_salary as Salary
FROM Employee AS E
JOIN (SELECT departmentid, MAX(salary) AS max_salary
      FROM Employee
      GROUP BY departmentid) AS DH
ON E.departmentid = DH.departmentid AND E.salary = DH.max_salary
JOIN Department AS D
ON E.departmentid = D.id
_________________________________________________________________________________
output:
| Department | Employee | Salary |
| ---------- | -------- | ------ |
| IT         | Jim      | 90000  |
| Sales      | Henry    | 80000  |
| IT         | Max      | 90000  |
반응형