본문 바로가기

SQL/LeetCode

[SQL] LeetCode: 1789. Primary Department for Each Employee

1789. Primary Department for Each Employee

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

[풀이1]

- 처음 풀었던 풀이; Window 함수 이용해서 풀이함 

-- 1. 출력: employee_id, department_id 
-- 2. 필터: 직원별 primary department, 한 부서 소속은 그 department 출력
-- 3. 정렬: X

SELECT employee_id 
      ,department_id
FROM employee 
WHERE primary_flag = 'Y' 
OR employee_id IN (SELECT IF(COUNT(employee_id) OVER (PARTITION BY employee_id) = 1,employee_id,null)
                    FROM employee)

 

 

[풀이2]

- 1번 풀이랑 거의 비슷함; WHERE절 서브 쿼리에 GROUP BY 사용함

-- 1. 출력: employee_id, department_id 
-- 2. 필터: 직원별 primary department, 한 부서 소속은 그 department 출력
-- 3. 정렬: X

SELECT employee_id
      ,department_id
FROM employee
WHERE primary_flag = 'Y'
OR employee_id IN (SELECT employee_id
                   FROM employee
                   GROUP BY 1
                   HAVING COUNT(employee_id)=1)

 

 

[풀이3]

-처음에 생각했었던 풀이; UNION 사용 

-- 1. 출력: employee_id, department_id 
-- 2. 필터: 직원별 primary department, 한 부서 소속은 그 department 출력
-- 3. 정렬: X

SELECT employee_id
      ,department_id
FROM employee
WHERE primary_flag = 'Y'

UNION 

SELECT employee_id
      ,department_id
FROM employee
GROUP BY 1
HAVING COUNT(employee_id) = 1

 

 

multiple department 직원과 only one department 직원을 구분해서 출력해야하는 문제.

처음 생각했던 풀이가 바로 안만들어서 생각보다 풀이에 오래 걸렸다. 

머리 속에 그려지는 쿼리를 바로바로 작성할 수 있게 꾸준히 연습 또 연습!!