WITH RECURSIVE
NEWTABLE AS
( SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM NEWTABLE
WHERE HOUR < 23 )
SELECT NEWTABLE.HOUR, COUNT(ani.ANIMAL_ID) AS COUNT
FROM NEWTABLE
LEFT JOIN ANIMAL_OUTS AS ani
ON NEWTABLE.hour = HOUR(ani.DATETIME)
GROUP BY NEWTABLE.hour
해당문제는 CTE(공통테이블)식을 사용하는 재귀쿼리 (Recursive Query)가 사용되었으며 위 코드는
아래 링크댓글을 인용하여 정리해보았습니다. ▼ 아래 링크
E 상세설명 :
1. WITH RECURSIVE 를 이용하여 01시에서 23시까지 존재하는 HOUR컬럼 테이블을 생성해줍니다.
2. 기본 ANIMAL_OUTS 테이블과 LEFT JOIN(조인)을 해줍니다.
3. GROUP BY SQL문을 이용하여 HOUR(시간)을 그룹화를 해줍니다.
4. SELECT를 이용하여 시간대와 시간대별 입양된 개수를 파악합니다.
RECURSIVE QUERY(재귀쿼리) :
위 SQL문에 작성된 RECURSIVE(재귀)는 영어로는 반복[되풀이]되는 뜻으로 이러한 SQL문을 RECURSIVE FUNCTION(재귀함수)가 사용되었다고 합니다. 재귀함수를 조금 더 설명해보자면 자기 자신을 호출하여 이용하는 함수입니다.
WITH RECURSIVE
CTE_테이블명 AS
(SELECT 문
)
SELECT 문
FROM 테이블명1
LEFT JOIN 테이블명2
ON 테이블1.기준컬럼 = 테이블2.기준컬럼
GROUP BY 그룹기준 컬럼
CTE :
CTE(Common Table Exprssions)는 우리나라로 풀어쓰자면 공통 테이블 식이라고 합니다.