NullNull

프로그래머스 SQL 입양 시각 구하기(1) 본문

SQL

프로그래머스 SQL 입양 시각 구하기(1)

KYBee 2022. 2. 28. 20:56

Data 구조

ANIMAL_OUTS : 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블

NAME TYPE NULLABLE
ANIMAL_ID VARCHAR(N) FALSE
ANIMAL_TYPE VARCHAR(N) FALSE
DATETIME DATETIME FALSE
INTAKE_CONDITION VARCHAR(N) FALSE
NAME VARCHAR(N) TRUE
SEX_UPON_INTAKE VARCHAR(N) FALSE

 

문제

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

 

예시

Output: 

HOUR COUNT
9 1
10 2
11 13
12 10
13 14
14 9
15 7
16 10
17 12
18 16
19 2

 

정답: 

DATETIME 타입에서 시간을 추출할 때 사용하는 HOUR 함수를 알고 있다면 쉽게 풀이할 수 있는 문제입니다.

HOUR(DATETIME)을 한다면 해당 데이터의 시간만 추출할 수 있습니다. 

HOUR 뿐만 아니라 YEAR, MONTH, DAY, MINUTE, SECOND 를 사용해서 각 DATETIME 데이터의 년, 월, 일, 분, 초를 얻어오는 것도 가능합니다. 

 

따라서 우선 HOUR 함수를 이용해서 각 데이터들의 시간만을 추출한 뒤에 이를 그룹화 한 뒤에 집계하여 시간대별 입양 횟수를 조회합니다. 이후에 HAVING 절에서 09:00 부터 19:59 사이의 시간만 가능하도록, HOUR 중 9 이상 20 미만의 값만 조회합니다.

마지막으로 시간 순서대로 정렬하면 완료입니다.

SELECT HOUR(DATETIME) HOUR, COUNT(*) COUNT FROM ANIMAL_OUTS
GROUP BY HOUR
HAVING HOUR >= 9 AND HOUR < 20
ORDER BY HOUR
Comments