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

Jinyoung Cheon·2025년 8월 16일
0

코딩테스트

목록 보기
20/25

프로그래머스 SQL 고득점 Kit
https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit

GROUP BY

problem

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

code

SELECT HOUR(DATETIME) AS HOUR,
       COUNT(*)
 
FROM ANIMAL_OUTS

WHERE HOUR(DATETIME) BETWEEN 9 AND 19

GROUP BY HOUR(DATETIME)

ORDER BY HOUR

note

처음에 작성했던 쿼리는 다음과 같다.

SELECT DATE_FORMAT(DATETIME, %i) AS HOUR,
	   COUNT(*)

FROM ANIMAL_OUTS

WHERE 9 < DATE_FORMAT(DATETIME, %i) < 19

GROUP BY DATE_FORMAT(DATETIME, %i)

ORDER BY HOUR

다음과 같은 결과값이 나와서 당황했다.. ㅋ
생각해보니 %i는 분을 의미하는 것을 실수했다.
이참에 DATE_TIME에 관한 내용을 정리하고자 한다.

📌 시간 추출 함수

YEAR(DATETIME) → 연도만 뽑기 (예: 2025)

MONTH(DATETIME) → 월만 뽑기 (예: 8)

DAY(DATETIME) → 일(day)만 뽑기 (예: 16)

HOUR(DATETIME) → 시(hour)만 뽑기 (예: 0~23)

MINUTE(DATETIME) → 분(minute)만 뽑기 (0~59)

SECOND(DATETIME) → 초(second)만 뽑기 (0~59)

📌 날짜 계산 함수

DATE(DATETIME) → 날짜(yyyy-mm-dd)만 뽑기

DATEDIFF(d1, d2) → 두 날짜 차이(일 단위)

TIMESTAMPDIFF(unit, d1, d2) → 두 시점 차이 (연, 월, 일, 시, 분 등 단위 지정)

📌 포맷팅 함수

DATE_FORMAT(DATETIME, '%Y-%m-%d %H:%i:%s') → 문자열 포맷으로 바꿔줌

%Y = 연도(4자리), %m = 월, %d = 일

%H = 시(0023), %i = 분(0059), %s = 초(00~59)

👉 정리

숫자 집계/정렬 목적 → HOUR(), MINUTE() 사용이 적합.

출력 포맷 맞추기 목적 → DATE_FORMAT() 사용이 적합.

profile
데이터를 향해, 한 걸음씩 천천히.

0개의 댓글