1789. Primary Department for Each Employee : leetcode

오유찬·2026년 1월 4일

SQL

목록 보기
35/71
SELECT      employee_id, 
            (CASE WHEN count(department_id) > 1 AND primary_flag = 'Y' THEN department_id
            WHEN count(department_id) = 1 THEN department_id END) as department_id
FROM        Employee
GROUP BY    employee_id
ORDER BY    employee_id
employee_iddepartment_idprimary_flag
11N
21Y
22N
33N
42N
43Y
44N

이 테스트 케이스에 대한 output이 아래처럼 나온다.

employee_iddepartment_id
11
21
33
4null

count와 같은 집계 함수는 제대로 기능하지만 primary_flag = 'Y'라는 비교문에 대해서 group by로 압축했을 때는 제대로 비교하지 못하고 느슨한 sql에서는 첫 행으로 압축하고 비교한 이후 맞지 않으면 null로 처리한다.

window 함수를 사용해도 되지만 집계 함수를 이용해서 풀어보려고 한다.

SELECT      employee_id, 
            COALESCE(
                MAX(CASE WHEN primary_flag = 'Y' THEN department_id END),
                MAX(department_id)
            ) as department_id
FROM        Employee
GROUP BY    employee_id
ORDER BY    employee_id 

NULL, 3, NULL 이렇게 리스트가 있다고 할 때, 그대로 출력하게 되면 첫 번째 레코드를 확인하면서 NULL을 출력한다. 여기서 MAX, MIN 함수를 사용하면 유일한 값인 3을 뽑아낼 수 있다. 집계 함수는 NULL을 취급하지 않기 때문에 3만 뽑히게 되는 것이다.

profile
열심히 하면 재밌다

0개의 댓글