MySQL

[SQL 문제풀이] 입양 시각 구하기(1)-프로그래머스

illho 2023. 5. 22. 16:49

문제 링크

 

https://school.programmers.co.kr/learn/courses/30/lessons/59412#qna

 

프로그래머스

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

programmers.co.kr

 

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

 

풀이

 

09:00 부터 19:59까지의 조건이 있으니 WHERE 조건문에 BETWEEN을 써서 09시부터 19시 까지 데이터를 찾는다.

각 시간대별로 입양 건수를 찾기위해 GROUP BY 를 사용하고 DATE_FORMAT으로 시간만 나오게 해서 구한다.

문자같은경우 10 이하는 숫자앞에 0이 붙기때문에 CAST 를 써서 숫자로 변환하였다. 마지막으로 시간대 순으로 정렬 한다.

 

쿼리

 

SELECT
CAST(DATE_FORMAT(DATETIME,'%H') AS UNSIGNED) AS HOUR,
COUNT(1) AS COUNT
FROM
ANIMAL_OUTS
WHERE
DATE_FORMAT(DATETIME,'%H') BETWEEN '09' AND '19'
GROUP BY DATE_FORMAT(DATETIME,'%H')
ORDER BY DATE_FORMAT(DATETIME,'%H')
;

 

MySQL에 시간을 구할때 굳이 DATE_FORMAT을 쓰지않고 HOUR(DATETIME) 라는 함수가 있다는 것을 알게 됐다.

그래서 더 간단하게 쿼리를 작성할 수 있다.

 

SELECT
HOUR(DATETIME) AS HOUR,
COUNT(1) AS COUNT
FROM
ANIMAL_OUTS
WHERE
HOUR(DATETIME) BETWEEN 9 AND 19
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
;