SQL

SQL 코드카타 오답: WITH RECURSIVE()

sawo11 2024. 12. 20. 20:40

입양 시각 구하기(2)

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

-- 반복문을 통한 테이블 생성
WITH RECURSIVE Hours AS ( 
    -- 베이스 케이스: 재귀의 시작점
    SELECT 0 AS HOUR -- 시작값을 0으로 설정
    UNION ALL
    -- 재귀 케이스: 이전 결과를 기반으로 반복적으로 데이터 생성
    SELECT HOUR + 1
    FROM Hours
    WHERE HOUR < 23
)
-- 시간대별 입양 건수 집계
SELECT H.HOUR,
       COALESCE(COUNT(A.HOUR), 0) AS COUNT -- COUNT 결과가 NULL인 경우, 0으로 변환하여 표시
FROM Hours H
LEFT JOIN ( -- Hours 테이블과 ANIMAL_OUTS LEFT JOIN -> 없는 시간 생성
            SELECT HOUR(DATETIME) AS HOUR
            FROM ANIMAL_OUTS
        ) A
ON H.HOUR = A.HOUR
GROUP BY H.HOUR
ORDER BY H.HOUR;