Allen's 데이터 맛집
프로그래머스 lv. 4 : 입양 시각 구하기(2) 본문
문제
WITH RECURSIVE hours AS (
SELECT 0 AS num
UNION ALL
SELECT num + 1 FROM hours
WHERE num < 23
)
SELECT
hours.num AS hour,
COUNT(a0.animal_id) AS count
FROM
hours
LEFT JOIN
animal_outs AS a0 ON EXTRACT(HOUR FROM a0.datetime) = hours.num
GROUP BY
hours.num
ORDER BY
hour;
풀이
1. WITH RECURSIVE 구문을 사용하여 0부터 23까지의 숫자를 가지는 hours 테이블을 생성합니다. 이를 num이라는 칼럼으로 정의합니다.
2. animal_outs 테이블에서 동물이 나간 날짜 및 시간 정보(datetime)를 기준으로 시간(HOUR)을 추출합니다.
3. 생성한 hours 테이블과 animal_outs 테이블을 LEFT JOIN으로 연결합니다. 이때 EXTRACT(HOUR FROM a0.datetime)는 동물이 나간 시간을 시간대로 변환합니다.
4.각 시간대별로 동물이 나간 횟수를 계산하기 위해 COUNT(a0.animal_id)를 사용합니다.
5. 결과를 시간대(hour)를 기준으로 정렬하여 출력합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/59413