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