개발/SQL

프로그래머스SQL_입양 시각 구하기(2)(WITH RECURSIVE)

송디 2024. 6. 17. 09:55

출처 : 프로그래머스

■ 사용 문법 

WITH RECURSIVE

 

 

■ 사용 방법

아무 생각없이 HOUR로 그룹핑을 해주고 COUNT를 제출했는데, 틀렸다. 문제를 다시보니 0건 이더라도 0시부터 23시까지 다 나와야 한다. 그래서 재귀를 이용해서 풀었다. 

1) WITH RECURSIVE 로 임시 테이블 만들기 

WITH RECURSIVE cte_name AS (
    -- Anchor member
    initial_query
    UNION ALL
    -- Recursive member
    recursive_query
)
SELECT * FROM cte_name;
#cte_name: CTE(Common Table Expression)의 이름입니다.
#initial_query: 재귀가 시작되는 기본 쿼리(앵커 멤버)입니다.
#recursive_query: 재귀적으로 호출되는 쿼리입니다. cte_name을 참조하여 반복적으로 실행됩니다.

2) 임시테이블과 ANIMAL_OUTS 테이블을 LEFT JOIN을 해준다. 

3) HOUR로 GROUP BY를 해준다. 

4) COUNT로 HOUR 별 입양횟수를 구해준다. 

 

■ 코드

with recursive ANIMAL_OUTS_PEAK_TIME AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR+1 FROM ANIMAL_OUTS_PEAK_TIME
    WHERE HOUR < 23
)

SELECT 
    ANIMAL_OUTS_PEAK_TIME.HOUR,
    COUNT(HOUR(A.DATETIME))
FROM ANIMAL_OUTS_PEAK_TIME
left join ANIMAL_OUTS as A
on ANIMAL_OUTS_PEAK_TIME.HOUR = HOUR(A.DATETIME)
GROUP BY ANIMAL_OUTS_PEAK_TIME.HOUR
728x90