본문 바로가기

코딩일기

SQL 코드카타 107 - Primary Department for Each Employee

https://leetcode.com/problems/primary-department-for-each-employee/description/

 

Column Name Type
employee_id int
department_id int
primary_flag varchar

 

Employee 테이블:

 

  • employee_id는 직원의 ID입니다.
  • department_id는 직원이 속한 부서의 ID입니다.
  • primary_flag는 ENUM 타입으로 ('Y', 'N') 값을 가질 수 있습니다. 'Y'는 해당 부서가 직원의 주 부서임을 나타내고, 'N'은 해당 부서가 주 부서가 아님을 나타냅니다.

모든 직원과 그들의 주 부서를 보고하는 솔루션을 작성하세요. 직원이 하나의 부서에만 속해 있는 경우, 그들의 유일한 부서를 보고하세요.

 

select
    employee_id,
    department_id
from Employee
group by employee_id
having count(department_id) = 1

 

 

먼저 소속된 부서가 한개밖에 없는 직원들을 필터링한다.

 

-- select
--     employee_id,
--     department_id
-- from Employee
-- group by employee_id
-- having count(department_id) = 1

select employee_id,
    department_id 
from Employee
where primary_flag = 'Y'

 

윗부분을 잠시 주석처리 한 후, 주요 부서가 있는 직원들을 필터링한다.

 

select
    employee_id,
    department_id
from Employee
group by employee_id
having count(department_id) = 1
union
select employee_id,
    department_id 
from Employee
where primary_flag = 'Y'

 

두 쿼리를 결합하여 최종 결과를 나타낸다.

성공!

 

 

처음에는 두가지 조건을 각각 어떤 식으로 적용하면 좋을지 고민이 있었는데 오랜만에 union을 사용해 볼 수 있는 좋은 기회가 되었다.