WITH RECURSIVE number_sequence(HOUR) AS (
SELECT 0
UNION ALL
SELECT HOUR + 1 FROM number_sequence WHERE HOUR < 23
)
select HOUR, 0 as COUNT from number_sequence
-- 1. HOUR, COUNT 테이블 생성해서 HOUR 0-23, COUNT 0으로 값 채워넣는 쿼리
where HOUR not in (select cast(DATE_FORMAT(DATETIME, '%H') as signed) as HOUR FROM ANIMAL_OUTS)
-- 2. 1에서 생성한 테이블에서 ANIMAL_OUTS테이블에서 시간대별 COUNT 값 있는부분 제외(not in)
union
SELECT cast(DATE_FORMAT(DATETIME, '%H')as signed) as HOUR, count(*) as count
FROM ANIMAL_OUTS group by HOUR
ORDER BY HOUR
-- 3. ANIMAL_OUTS 테이블에서 시간대별 COUNT 값 있는 부분과 2에서 생성한 테이블 union
2번 과정없이 1번과 3번을 UNION하게 되면 COUNT값이 없는 HOUR이 출력이같이 되어서 중복된다.
최종 출력 결과는 HOUR중복없이 각 시간대 별로 입양이 몇 건이나 발생 했는지 정상적으로 조회 가능하다.
'DB STUDY > 프로그래머스' 카테고리의 다른 글
프로그래머스 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.12.13 |
---|---|
프로그래머스 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 문제 (0) | 2023.12.11 |
프로그래머스 성분으로 구분한 아이스크림 총 주문량 문제 (0) | 2023.12.11 |
프로그래머스 입양 시각 구하기(1) 문제 (1) | 2023.12.11 |