프로그래머스 SQL 고득점 Kit - 그룹별 조건에 맞는 식당 목록 출력하기

Jinyoung Cheon·2025년 8월 14일
0

코딩테스트

목록 보기
19/25

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

JOIN

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

JOIN에 적응이 되어가길래 오랜만에 GROUP BY 문제를 풀어보았다.
LEVEL2 임에도 불구하고 또 오랜만에 GROUP BY를 풀어보니 어렵네...? ㅠㅠ
처음에 작성했던 쿼리는 다음과 같다.

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

GROUP BY DATE_FORMAT(DATETIME, '%i')

ORDER BY HOUR

어.. 근데 왜 HOUR에 59까지 있지 ??? 뭐가 잘못된거지 ??????
확인해본 결과 DATE_FORMAT%i로 옵션을 줬기 때문에 분 단위로 GROUP BY를 진행한 것이었다.
이참에 DATE에 관한 내용을 정리해보려고 한다.

📌 시간 추출 함수

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개의 댓글