SQL
[프로그래머스] 입양 시각 구하기(2)
seaforest
2024. 8. 13. 20:55
프로그래머스 | Lv.4
단순하게 group by와 시간 함수를 사용하는 문제라고 생각하였지만, 문제에서 제시한 'ANIMAL_OUTS' 테이블에는 7시부터 19시까지의 입양건수만 있기 때문에 0시~6시, 그리고 18시~23시까지 시간대 데이터를 추가해야한다.
1. 정답 쿼리
-- WTIH문과 DUAL 테이블을 활용하여 0시~23시 데이터 생성
WITH HOUR AS
( SELECT LEVEL-1 AS HOUR
FROM DUAL
CONNECT BY LEVEL-1 < 24 )
-- 위에서 만든 HOUR 테이블에 ANIMAL_OUTS 테이블을 FULL OUTER JOIN
SELECT H.HOUR,
NVL(COUNT,0) AS COUNT --NVL함수를 사용하지 않으면 count가 0인 경우는 NULL로 표시됨.
FROM HOUR H
FULL OUTER JOIN
( SELECT TO_CHAR(DATETIME,'HH24') AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
GROUP BY TO_CHAR(DATETIME,'HH24') ) O
ON H.HOUR = O.HOUR
ORDER BY HOUR;
2. TO_CHAR(datetime,'HH')
>> 예를 들어 19시는 07시로 나오게 됨.
SELECT animal_id, animal_type, datetime, to_char(datetime,'HH') as hour
FROM ANIMAL_OUTS ;
3. TO_CHAR(datetime,'HH24')
>> 24시 기준으로 계산이 되어 19시는 19시로 표기됨
SELECT animal_id, animal_type, datetime, to_char(datetime,'HH24') as hour
FROM ANIMAL_OUTS ;