SeaForest

[프로그래머스] 입양 시각 구하기(2) 본문

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;

 

FULL OUTER JOIN 으로 시간대 테이블과 ANIMAL_OUTS 집계 테이블 조인

 

 

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 ;

 

'SQL' 카테고리의 다른 글

Oracle 날짜 함수  (0) 2024.08.11
SQL 쿼리 가독성 높이기  (1) 2024.01.07
[SQL] 정규화, 반정규화  (0) 2023.04.09
[SQL] DELETE vs TRUNCATE vs DROP  (0) 2022.10.13
[SQL] MySQL 기본 명령어  (0) 2022.10.05