데이터엔지니어링/SQL

leetcode - 1789번 문제 풀이

루피처럼 2025. 5. 26. 00:25

📋 테이블: Employee

🎯 문제

직원의 주 부서를 구하세요.

조건은 다음과 같습니다

  1. 직원에게 primary_flag = 'Y'인 부서가 있다면 → 그 부서를 주 부서로 간주합니다.
  2. 직원이 부서가 1개뿐이라면, primary_flag = 'N'이어도 그 부서를 주 부서로 간주합니다.
Employee 테이블

입력
+-------------+---------------+--------------+
| employee_id | department_id | primary_flag |
+-------------+---------------+--------------+
| 1           | 1             | N            |
| 2           | 1             | Y            |
| 2           | 2             | N            |
| 3           | 3             | N            |
| 4           | 2             | N            |
| 4           | 3             | Y            |
| 4           | 4             | N            |
+-------------+---------------+--------------+



출력
+-------------+---------------+
| employee_id | department_id |
+-------------+---------------+
| 1           | 1             |
| 2           | 1             |
| 3           | 3             |
| 4           | 3             |
+-------------+---------------+

풀이

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
);

 

 

🧠 풀이 과정 

1.먼저, 직원은 여러 부서에 속할 수 있다고 했고 그중에 하나를 주 부서(primary_flag = ‘Y’)로 정한다고 했으니까

    → primary_flag = ‘Y’인 부서만 뽑으면 되겠다고 생각함

2. 그런데 예시를 보니까 어떤 직원은 부서가 하나뿐인데도 primary_flag가 ‘N’으로 되어 있는 경우가 있었음

    → 이런 경우엔 부서가 하나뿐이니까, 그 부서가 자동으로 주 부서겠다고 판단함

3. 그래서 먼저 primary_flag = ‘Y’인 직원들을 먼저 뽑고,

4. 그 다음엔 부서가 하나뿐인 직원들을 따로 찾아서, 그 부서도 주 부서로 간주해서 포함시킴

5. 마지막으로 이 두 결과를 합치면, 모든 직원의 정확한 주 부서만 남게 됨