[SQL] 재귀함수 (RECURSIVE CTE)

김민건·2024년 7월 25일
0

Q. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

  • 기존에 짜서 실패한 코드
SELECT HOUR(AO.DATETIME) HOUR, COUNT(DISTINCT AO.ANIMAL_ID) COUNT
FROM ANIMAL_OUTS AO
GROUP BY HOUR

: COUNT가 0이어도 정답에서는 HOUR들이 다 나와야한다
즉, 새로운 HOUR TABLE을 만들어서 결합해야함.
이 때 사용하는 것이 CTE(Common Table Expression)

WITH RECURSIVE CTE AS(
 SELECT 0 AS HOUR
 UNION ALL
 SELECT HOUR + 1
 FROM CTE
 WHERE HOUR < 23
)
SELECT CTE.HOUR, COUNT(DISTINCT ANIMAL_OUTS.ANIMAL_ID)
FROM CTE
LEFT JOIN ANIMAL_OUTS ON HOUR(ANIMAL_OUTS.DATETIME) = CTE.HOUR
GROUP BY HOUR

0개의 댓글