https://leetcode.com/problems/employees-whose-manager-left-the-company/description/
Colum Name | Type |
employee_id | int |
name | varchar |
manager_id | int |
salary | int |
Employees 테이블:
- employee_id : 테이블의 고유 키
- name : 이메일주소
- manager_id : 직원의 매니저 ID, 매니저가 없는 직원의 경우 null
- salary : 급여
다음 조건을 만족하는 직원들의 ID를 찾아야 합니다:
- 급여가 $30,000 미만인 직원.
- 매니저가 회사를 떠난 직원. 매니저가 회사를 떠나면, 매니저의 정보는 Employees 테이블에서 삭제되지만, 해당 직원들의 manager_id는 여전히 떠난 매니저의 ID로 설정됩니다.
결과 테이블은 employee_id를 기준으로 정렬하여 반환하세요.
select *
from Employees E1
left join Employees E2 on E1.manager_id = E2.employee_id
먼저 주어진 테이블을 자체결합해서 manager_id가 employee_id에 없는 데이터를 찾는다. 퇴사자는 employee_id에서 삭제처리 되기 때문이다.
select *
from Employees E1
left join Employees E2 on E1.manager_id = E2.employee_id
where E2.employee_id is null and E1.salary <= 30000
where구문을 통해서 급여가 30000이하인 직원과 E2.employee_id가 없는 직원(즉, 매니저가 없는 직원)을 필터링한다.
select E1.employee_id
from Employees E1
left join Employees E2 on E1.manager_id = E2.employee_id
where E2.employee_id is null and E1.salary <= 30000
그리고 조건에 따라 직원의 아이디만 출력하도록 하면 성공이라고 생각했는데 제출해보니 정답이 아니었다.
문제를 더 살펴보니 아무래도 현재 매니저가 없는 직원이 아니라 매니저가 있었지만 퇴사한 상태인 직원을 찾아야하는 것이었다. 즉, 처음부터 매니저가 없는 직원은 포함되지 않아야한다.
select E1.employee_id
from Employees E1
left join Employees E2 on E1.manager_id = E2.employee_id
where E2.employee_id is null and E1.salary < 30000 and E1.manager_id is not null
where구문에 조건을 하나 더 추가했다. E1. manager_id가 null이 아닌 직원(즉, 매니저가 있는 직원)을 추가로 지정해준다.
추가로, 월급이 30000이하가 아니라 미만인 직원을 찾아야하기때문에 부등호도 수정해주었다.
따라서 매니저가 있는 직원중, 지금은 그 매니저가 회사를 떠났고, 월급이 30000미만인 직원만 골라낸 후, 그 직원의 아이디를 출력해주었다.
select E1.employee_id
from Employees E1
left join Employees E2 on E1.manager_id = E2.employee_id
where E2.employee_id is null and E1.salary < 30000 and E1.manager_id is not null
order by E1.employee_id
마지막으로 오름차순으로 정렬만 하면 완료!
'코딩일기' 카테고리의 다른 글
SQL 코드카타 114 - Exchange Seats (1) | 2024.07.11 |
---|---|
SQL 코드카타 112 - Count Salary Categories (0) | 2024.07.11 |
SQL 코드카타 122 - Delete Duplicate Emails (0) | 2024.07.09 |
알고리즘 코드카타 112 - 행렬 테두리 회전하기 (0) | 2024.07.09 |
SQL 코드카타 111 - Last Person to Fit in the Bus (0) | 2024.07.08 |