본문 바로가기
Mysql

프로그래머스 SQL 고득점 Kit (GROUP BY) 입양 시각 구하기(1)

by 열정적인 이찬형 2021. 11. 8.

문제 링크

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. 

ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME,SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

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


테이블


문제 결과

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


접근 방법

  • SQL 문의 조회 명령어 SELECT문에서 DATETIME에 시간과 개수를 출력해야 한다.
  • COUNT문을 사용하였으며 결과는 COUNT,HOUR로 출력되어 AS문도 사용하였습니다.
  • DATETIME을 시간으로 바꾸고 그룹으로 묶어야 하기 때문에 GROUP BY hour(DATETIME)을 사용하였습니다.
  • HAVING은 그룹으로 묶인 결과에 조건을 주는 명령어로 09시부터 19시에 속한 값들을 출력해야 하기 때문에 HOUR>=9 AND HOUR<=19를 해주었습니다.
  • 마지막으로 결과를 시간순으로 조회하라는 조건이 있으므로 HOUR을 오름차순으로 정렬(ORDER BY) 하였습니다.

※ 처음 문제를 접근하였을 때에는 DATE_FORMAT(DATETIME,"%H")으로 DATETIME을 HOUR형식으로 변경하여 정답을 작성하였는데 hour()이라는 알게되어서 hour을 사용하는 방식으로 답을 수정하였습니다. DATE_FORMAT을 써도 동일한 답이 나옵니다.!


결과 코드

SELECT hour(DATETIME) as HOUR, COUNT(hour(DATETIME)) as COUNT FROM ANIMAL_OUTS GROUP BY hour(DATETIME)  HAVING HOUR>=9 AND HOUR<=19 ORDER BY HOUR;

댓글