SQL 문제 풀이

[프로그래머스] Lv2. 입양 시각 구하기(1) Oracle

gogi masidda 2024. 2. 27. 15:38
입양 시각 구하기(1)
문제 설명

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

NAMETYPENULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_OUTCOME VARCHAR(N) FALSE

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

SELECT EXTRACT(HOUR FROM CAST(DATETIME AS TIMESTAMP)) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE EXTRACT(HOUR FROM CAST(DATETIME AS TIMESTAMP)) BETWEEN 9 AND 19
GROUP BY EXTRACT(HOUR FROM CAST(DATETIME AS TIMESTAMP))
ORDER BY HOUR;

DATETIME은 DATE와 TIMESTAMP가 합쳐진 자료형으로, 시,분,초를 EXTRACT를 할 때는 CAST로 TIMESTAMP로 바꿔주어야 하고, 연 월 일을 할 때는 DATE로 바꿔주어야 한다.

SELECT TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) AS HOUR, COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE TO_NUMBER(TO_CHAR(DATETIME, 'HH24')) BETWEEN 9 AND 19
GROUP BY TO_NUMBER(TO_CHAR(DATETIME, 'HH24'))
ORDER BY HOUR

그냥 TO_CHAR만 하면 09로 나와서 9로 바꿔주기 위해 TO_NUMBER를 한다.

728x90