SQL/LeetCode
[SQL] Primary Department for Each Employee(LeetCode/Oracle)
DBwiz
2023. 10. 29. 14:35
안녕하세요!
이번 포스팅은 LeetCode에 있는 Primary Department for Each Employee 문제를 OracleDB로 풀어보려고 합니다!
(모든 문제는 Oracle로 풀이하겠습니다.)
1. 문제 링크 : https://leetcode.com/problems/primary-department-for-each-employee/description/
2. 문제
| Column name | Type |
| employee_id | int |
| department_id | int |
| primary_flag | varchar |
[문제] Employees can belong to multiple departments. When the employee joins other departments, they need to decide which department is their primary department. Note that when an employee belongs to only one department, their primary column is 'N'.
Write a solution to report all the employees with their primary department. For employees who belong to one department, report their only department.
주 부서에 전 직원을 조회하고, 한 부서에 소속된 직원의 경우 유일한 부서를 조회하는 문제입니다.
3. 제출 쿼리 및 설명
1) PRIMARY_FLAG의 값이 'Y'인 직원과 부서의 아이디를 조회합니다.
SELECT EMPLOYEE_ID, DEPARTMENT_ID
FROM EMPLOYEE
WHERE PRIMARY_FLAG = 'Y'
2) 하나의 부서에 소속된 직원의 경우에 유일한 직원과 부서의 아이디를 조회합니다.
SELECT EMPLOYEE_ID, DEPARTMENT_ID
FROM EMPLOYEE
WHERE EMPLOYEE_ID IN (
SELECT EMPLOYEE_ID
FROM EMPLOYEE
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) = 1
)
최종) 1번 쿼리와 2번 쿼리를 UNION을 활용해서 합칩니다.
SELECT EMPLOYEE_ID, DEPARTMENT_ID
FROM EMPLOYEE
WHERE PRIMARY_FLAG = 'Y'
UNION
SELECT EMPLOYEE_ID, DEPARTMENT_ID
FROM EMPLOYEE
WHERE EMPLOYEE_ID IN (
SELECT EMPLOYEE_ID
FROM EMPLOYEE
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) = 1
)
;