/////
Search
Duplicate

입양 시각 구하기(1)

태그
GROUP BY
한 번 더 체크
목차

문제

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMENAMESEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

예시

SQL문을 실행하면 다음과 같이 나와야 합니다.

정답

SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT FROM ANIMAL_OUTS GROUP BY HOUR(DATETIME) HAVING HOUR >= 9 and HOUR <= 19 ORDER BY HOUR;
SQL
복사

풀이

시간별로 그룹핑을 하는 방법을 묻는 문제이다.
우선 DATETIME에서 시간을 추출하는 방법은 HOUR()함수를 사용하는 것이다.
따라서 GROUP BY HOUR(DATETIME)을 통해서 우선 시간대별로 그룹핑을 한다.
그 다음 SELECT 절을 통해서 시간대와 시간대별 DATETIME을 COUNT한다. 이때 주의해야 하는 점은 COUNT(HOUR(DATETIME))이 아니라 COUNT(DATETIME)으로 해야된다는 점이다. 왜냐하면 SELECT 절은 GROUP BY를 수행한 이후 각 그룹별로 수행이 되는 것이기 때문이다.
SELECT 절을 통해 칼럼을 집계하고 조회할 때 예시에서 칼럼명이 HOUR와 COUNT로 되어있기 때문에 ALIAS 설정을 통해서 HOUR와 COUNT로 칼럼명이 조회되게끔 한다.
SELECT 절을 수행한 이후에는 HAVING 절을 통해서 출력되는 시간대를 조절한다.
마지막으로 ORDER BY 절을 통해서 정렬을 수행한다.