181. Employees Earning More Than Their Managers
<문제>
아래 테이블에서 자신의 manager보다 많은 급여를 받는 employee의 name을 출력하라.
Employee table:
| id | name | salary | managerId |
|---|---|---|---|
| 1 | Joe | 70000 | 3 |
| 2 | Henry | 80000 | 4 |
| 3 | Sam | 60000 | null |
| 4 | Max | 90000 | null |
<문제 해석>
manager의 salary는 어디서 보지? 잘 보면 managerId = id이다. id가 3인 직원은 직책이 ‘Manager’인 것으로 managerId에 있는 3이 그를 가리키는 것이다.
그러면 employee 테이블을 ‘id = managerid’라는 기준으로 SELF JOIN해야 하는 것이다. (자기 스스로 JOIN하는 것을 SELF JOIN이라고 한다)
SELECT *
FROM employee AS e1 LEFT JOIN employee AS e2
ON e1.managerId = e2.id;
| id | name | salary | managerId | id | name | salary | managerId |
|---|---|---|---|---|---|---|---|
| 1 | Joe | 70000 | 3 | 3 | Sam | 60000 | null |
| 2 | Henry | 80000 | 4 | 4 | Max | 90000 | null |
| 3 | Sam | 60000 | null | null | null | null | null |
| 4 | Max | 90000 | null | null | null | null | null |
지금은 id = 1, id = 2 행만 현재 문제풀이에 의미있는 행이다.
여기서 조건에 맞는 데이터만 원하는 형태로 뽑아내면 된다.
<최종 쿼리문>
SELECT e1.name AS 'Employee'
FROM employee AS e1 LEFT JOIN employee AS e2
ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;
짜라란 ~
