[Programmers] 입양 시각 구하기(2)
정답
-- ANIMAL_OUTS: ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME
WITH RECURSIVE HOURS AS(
-- Non-recursive (초기에만 실행)
SELECT 0 AS H
UNION ALL
-- recursive
SELECT H + 1 AS H
FROM HOURS
WHERE H < 23
)
SELECT T2.H AS HOUR, COUNT(T1.ANIMAL_ID) AS COUNT
FROM ANIMAL_OUTS AS T1
RIGHT JOIN HOURS AS T2 ON HOUR(T1.DATETIME) = T2.H
GROUP BY T2.H
ORDER BY T2.H
;
✅ Point
- 누락된 시간 채우기
- want:
- 0 ~ 23 범위의 시간별 집계
- 데이터가 없는 시간도 모두 표시
- 해결 방법
- 0 ~ 23 범위의 테이블 만들기
- WITH RECURSIVE를 사용하여 0 ~ 23을 생성하는 시간 table 작성
- 기존 데이터와 join
- 누락된 시간대도 포함되어야 하므로 시간 table을 기준으로 join
- 누락된 시간의 count 처리
- NULL 인 row는 세지 않는다
- 방법1:
count(기존 table의 주요 column)
- 방법2:
sum(case when ... then 1 else 0)
- 방법1:
- NULL 인 row는 세지 않는다
- 0 ~ 23 범위의 테이블 만들기
- want: