프로그래머스 SQL SELECT - 입양 시각 구하기 1

dev-swd·2021년 1월 14일
0

sql practice

목록 보기
2/5
post-thumbnail

프로그래머스 SQL SELECT


MySQL 로 작성하였습니다.


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

SELECT
	HOUR(datetime) as hour,
	COUNT(*) as count
FROM
	animal_outs
WHERE
	DATE_FORMAT(datetime, '%H:%I') BETWEEN '09:00' AND '19:59'
GROUP BY hour
ORDER BY hour;


WHERE 절 분석

DATE_FORMAT(DATETIME value, FORMAT)
시간을 원하는 형태로 반환하는 함수.
해당 테이블의 컬럼명 datetime 은 속성이 DATETIME 이며 날짜 형식 YYYY-MM-DD HH:MI:SS 를 반환한다. 문제는 시간대 별 09:00 ~ 19:59 까지라고 했으니, 이 형식을 시와 분만 나오게 하여 조건문을 만들어야 한다. 따라서 date_format(컬럼명, '%h:%i') 로 원하는 형식으로 값을 뽑은 다음 between 조건으로 주어진 시간대를 입력하면, 원하는 조건이 만들어진다. MySQL 에서 자주 사용하는 날짜 포멧은 다음과 같다.
'%Y-%m-%d %H:%i:%s'


더 많은 date format 에 대해서 알고 싶다면 클릭!


SELECT 절 분석

HOUR('2021-01-04 13:11:07') : 시간을 리턴한다 >> 0 ~ 23
날짜 관련 함수는 여러 가지 있지만, 간단하게 몇 개만 보면 아래와 같은 것들이 있다.
YEAR('2021-01-04 13:11:07') : 연도를 리턴한다 >> 1000 ~ 9999
MINUTE('2021-01-04 13:11:07') : 분을 리턴한다 >> 0 ~ 59
따라서, HOUR 함수에 datetime 이라는 컬럼을 넣어주면 0 ~ 23 까지의 값이 나오게 된다.
그 후 count() 함수를 사용해서 로우의 갯수를 세어준다.


GROUP BY 절 분석

위에서 HOUR() 함수를 사용해서 취득한 값을 그룹으로 묶어주면 중복 값은 제거되고, count() 함수에 의해서 묶여진 row 값의 갯수를 취득할 수 있게 된다.


여기에는 문제에 대한 자세한 설명은 없으니 프로그래머스의 사이트에서 테이블과 컬럼 값을 보고 풀이에 이용하면 된다.


>>> 문제 링크 클릭


profile
개발을 취미로 할 수 있는 그 때 까지

0개의 댓글