1. quiz
- 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
2. answer
WITH RECURSIVE table_1 AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR+1 FROM table_1 WHERE HOUR < 23
) , table_2 AS (
SELECT HOUR(DATETIME) AS HOUR
, COUNT(DISTINCT ANIMAL_ID) AS C
FROM ANIMAL_OUTS
GROUP BY HOUR
)
SELECT table_1.HOUR
,CASE WHEN table_2.C IS NULL THEN 0 ELSE C END AS C
FROM table_1
LEFT JOIN table_2 ON table_1.HOUR = table_2.HOUR
ORDER BY HOUR
- WITH 구문 이후에 오는 쿼리에서 임시 테이블의 테이블명을 사용하여 값을 참조할 수 있다.
WITH CTE AS (
SELECT 0 AS NUM
UNION ALL
SELECT 0 FROM SOME_TABLE
)
- WITH RECURSIVE 구문은 가상 테이블을 생성하면서 가상 테이블 자신의 값을 참조하여 값을 결정할 때 사용된다.
WITH RECURSIVE CTE AS(
SELECT 0 AS NUM
UNION ALL
SELECT NUM+1 FROM CTE
WEHRE NUM < 10
)