📋 테이블: Employee
🎯 문제
각 직원의 주 부서를 구하세요.
조건은 다음과 같습니다
- 직원에게 primary_flag = 'Y'인 부서가 있다면 → 그 부서를 주 부서로 간주합니다.
- 직원이 부서가 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. 마지막으로 이 두 결과를 합치면, 모든 직원의 정확한 주 부서만 남게 됨
'데이터엔지니어링 > SQL' 카테고리의 다른 글
leetcode - 1164번 문제 풀이 (0) | 2025.05.28 |
---|---|
solvesql - 제목이 모음으로 끝나지 않는 영화 (1) | 2025.05.27 |
leetcode - 1731번 문제 풀이 (7) | 2025.05.24 |
리트코드 : 1280. Students and Examinations (0) | 2025.05.01 |