Coding/SQL

[LeetCode-SQL 50] 1789. Primary Department for Each Employee

kangplay 2025. 1. 14. 22:44

 

문제

https://leetcode.com/problems/primary-department-for-each-employee/description/?envType=study-plan-v2&envId=top-sql-50

 

설명

두 개의 경우의 수(부서가 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을 사용할 때에는 컬럼명과 컬럼의 개수, 그리고 컬럼의 데이터 타입이 동일해야한다.