SQL 코드카타 73번
그 동안 어떻게 푸는지를 몰라서 묵혀놨던 73번 문제.
시간대별로 입양건수를 조회하는 문제인데,
입양이 없는 시간대도 명시해서 0으로 세어 줘야 하는 게 문제였다.
테이블에 있는 데이터로만 시간대별로 쪼개서 조회하면
SELECT Date_format(datetime, '%H') AS HOUR,
Count(*) AS COUNT
FROM animal_outs
GROUP BY 1
ORDER BY 1
결과가 이렇게 나오는데,
입양 건수가 없는 0시부터 6시까지, 그리고 20시~23시를 표기할 수가 없어서
이렇게만 제출하면 오답이 뜬다. 따라서 어제 풀었던 문제들에서 썼던
재귀적CTE를 써서 0시부터 23시의 비어있는 시간대부터 만들어 주고
ANIMAL_OUTS의 결과와 join해야 한다.
아래는 정답 쿼리와 조회 결과.
WITH recursive hour
AS
(
SELECT 0 AS n
UNION ALL
SELECT n+1
FROM hour
WHERE n<23)
SELECT n AS HOUR,
count(a.animal_id) AS COUNT
FROM hour h
LEFT JOIN animal_outs a
ON h.n = date_format(a.datetime,'%H')
GROUP BY 1