문제

설명
두 개의 경우의 수(부서가 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을 사용할 때에는 컬럼명과 컬럼의 개수, 그리고 컬럼의 데이터 타입이 동일해야한다.
'Coding > SQL' 카테고리의 다른 글
| [LeetCode-SQL 50] 1341. Movie Rating (0) | 2025.02.26 |
|---|---|
| [LeetCode-SQL 50] 626. Exchange Seats (0) | 2025.02.25 |
| [LeetCode-SQL 50] 1978. Employees Whose Manager Left the Company (0) | 2025.02.24 |
| [LeetCode-SQL 50] 1907. Count Salary Categories (1) | 2025.01.21 |
| [LeetCode-SQL 50] 180.Consecutive Numbers(윈도우 함수) (1) | 2025.01.16 |