♟️ 알고리즘/Leetcode

[MySQL][Leet Code] 1789. Primary Department for Each Employee (Easy)

Jerry_K 2025. 3. 7. 10:43

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


🗒️SQL 코드 풀이 

SELECT employee_id , department_id 
FROM Employee
WHERE employee_id 
IN
    (
    SELECT employee_id
        FROM Employee  
        GROUP BY employee_id 
        HAVING COUNT(*) = 1 
    )
OR primary_flag = "Y"

 

1. 조건이 2개가 있다. 

  • primary_flag 1개 밖에 없는 경우
  • primary_flag가  Y인 경우

 

2.  이 두가지를 WHERE로 필터링하여 출력하면 된다.

 

 

새로운 방법 (세로 행 합치기)

(
    SELECT employee_id , department_id 
        FROM Employee  
        GROUP BY employee_id 
        HAVING COUNT(*) = 1 
) 
UNION ALL
(
    SELECT employee_id , department_id 
        FROM Employee
        WHERE primary_flag = "Y"
)
  • UNION ALL 을 통해서 세로로 합칠 수 있다.
  • 이런 경우 컬럼 구조, 데이터 타입 같은 것들이 다 일치해야 합칠 수 있다.
  • 사실 이게 맨 처음 생각했던 방식인데, 세로로 합치는 법을 몰랐다... 

 

📌 문제 코멘트 

해당 문제를 포스팅하는 이유는 다음과 같다.

  • WHERE IN을 잘 쓰지 않음
  • OR 사용하지 않음 (여러 조건들을 걸어서 필터릴 할 생각을 못함)
  • UNION ALL을 통해서 세로로 합치는 방법

→ 해당 문법에 대해서는 익숙해지자 !

 


📚문제