Coding/SQL
[LeetCode-SQL 50] 1789. Primary Department for Each Employee
kangplay
2025. 1. 14. 22:44
문제

설명
두 개의 경우의 수(부서가 2개 이상인 경우, 부서가 1개인 경우)로 나누어 생각할 수 있으므로, UNION ALL을 사용해주면 된다.
구현
# Write your MySQL query statement below
( select e.employee_id, e.department_id
from Employee e
where e.primary_flag = 'Y' )
UNION ALL
( select e.employee_id, e.department_id
from Employee e
group by e.employee_id
having count(*) = 1)
새로 알게된 점
- SQL 실행 순서는 FROM / JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT 이고, FROM -> WHERE -> SELECT 순으로 작성하는 것이 효율적이다.
- GROUP BY를 사용할 때, 실행 순서에 따라 WHERE에 집계 함수가 들어가는 것이 불가능하다. 따라서 집계 함수에 대한 조건은 HAVING 절에 작성하자.
- UNION 이란, 여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법으로 중복된 값을 제거하고 보여준다. UNION ALL은 UNION과 동일하게 하나의 쿼리문으로 만들어주지만 중복된 값을 모두 보여준다.
- UNION과 UNION ALL을 사용할 때에는 컬럼명과 컬럼의 개수, 그리고 컬럼의 데이터 타입이 동일해야한다.