Re:제로부터 시작하는 갓생

[MySQL] 입양 시각 구하기(1)_Lv.2 본문

CodeKata/SQL

[MySQL] 입양 시각 구하기(1)_Lv.2

기븜 2025. 1. 5. 13:59
문제 https://school.programmers.co.kr/learn/courses/30/lessons/59412
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_IDANIMAL_TYPEDATETIMENAMESEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

요구사항

1. 특정 시간대별로 입양 건수를 찾아야함 select

 datetime: 시간대를 분석하기 위해 필요

animal_id: 입양된 동물의 수를 중복없이 세기 위해 필요

2. datetime에서 시간 추출 (방법 선택): ⓐ date_format ⓑ hour ⓒ extract

3. 오전 9:00~오후 7:59까지 시간대 필터링 when

4. 시간대 그룹화 group by

5. 시간대별 입양 건수 세기 count

6. 결과는 시간대 순으로 오름차순 정렬 order by

 

풀이방법
더보기
-- 방법1
SELECT date_format(datetime, '%H') as 'HOUR',
       count(animal_id) as 'COUNT'
from animal_outs
where date_format(datetime, '%H') between 09 and 19
group by 1
order by 1

-- 방법2
SELECT HOUR(datetime) AS 'HOUR',
       COUNT(animal_id) AS 'COUNT'
FROM animal_outs
WHERE HOUR(datetime) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR;

-- 방법3
SELECT EXTRACT(HOUR FROM datetime) AS 'HOUR',
       COUNT(animal_id) AS 'COUNT'
FROM animal_outs
WHERE EXTRACT(HOUR FROM datetime) BETWEEN 9 AND 19
GROUP BY HOUR
ORDER BY HOUR;

 

배운점
-- date_format함수
정의: 날짜, 시간을 지정된 형식으로 변환
공식: DATE_FORMAT(날짜열, '형식')

-- hour함수
정의: 시간정보에서 시간 부분만 추출
공식: HOUR(날짜열)

-- extract함수
정의: 날짜, 시간정보에서 특정 부분 추출
공식: EXTRACT(부분 FROM 날짜열)