240621_TIL

J Lee·2024년 6월 21일
0

아무리 사소하더라도 배움이 없는 날은 없다.

문제 링크

예전에 풀었던 방법
primary_flag = Y인 employee를 구하는 쿼리와
primary_flag = N이면서 숫자가 하나밖에 없는 (즉, primary department가 없으면서도 소속 부서가 2개 이상인 employee는 쿼리 결과에 뜨면 안됨) 경우를 구하는 쿼리를 union한 결과. 사실 이 편이 더 알아보긴 쉬울 것 같다.

SELECT employee_id,
       department_id
FROM   employee
GROUP  BY 1
HAVING Count(*) = '1'
UNION
SELECT employee_id,
       department_id
FROM   employee
WHERE  primary_flag = 'Y'
GROUP  BY 1 

오늘 풀었던 방법

WITH primary_y
     AS (SELECT employee_id,
                department_id
         FROM   employee
         WHERE  primary_flag = 'Y'),
     primary_n
     AS (SELECT e.employee_id,
                e.department_id
         FROM   employee e
                LEFT JOIN primary_y
                       ON e.employee_id = primary_y.employee_id
         WHERE  primary_y.employee_id IS NULL
         GROUP  BY 1
         HAVING Count(*) = 1)
SELECT *
FROM   primary_y
UNION
SELECT *
FROM   primary_n 

위에 풀었던 결과와 똑같다.
다만 primary_y와 primary_n을 CTE로 만들어 두고 본 쿼리에서는 union을 써서 두 뷰를 연결해 주기만 했다는 게 차이. 이것도 CTE 연습.

오늘은 팀프로젝트로 달려서 피곤하기도 하고
시간도 얼마 남지 않아 코드카타는 여기까지.
주말에는 다시 많은 문제를 연습해서 leetcode SQL50을 마무리해 보고 싶다.

profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보