부제:
입양 시각 구하기(2), 레벨 5
1. 문제 링크:https://school.programmers.co.kr/learn/courses/30/lessons/59413
2. 정답 코드:
WITH RECURSIVE date AS (
SELECT 0 as hour
UNION ALL
SELECT hour+1
from date
where hour < 23
)
SELECT
d.hour,
count(ao.animal_id) as count
from date as d
left join animal_outs as ao
on d.hour = hour(ao.datetime)
group by d.hour
order by d.hour
3. 오류 상황:
SELECT
hour(datetime) as hour,
count(animal_id) as count
from animal_outs
group by hour(datetime)
order by hour
=> 데이터가 없는 시간대 누락
4. 시도 방법:
=> RECURSIVE CTE 사용
=> LEFT JOIN 사용
5. 최종 문제 해결 방법:
=> SQL에서 존재하지 않는 연속된 숫자(0~23)를 생성하려면 RECURSIVE CTE (재귀형 공통 테이블 식)를 사용
=> 0부터 23까지 숫자를 가진 가상의 테이블을 먼저 만드는 RECURSIVE 사용
=> 가상 테이블을 왼쪽(LEFT)에 두고 원본 테이블을 LEFT JOIN 한다. 그래야 입양 기록이 없는 시간대도 숫자가 살아남고, 기록이 없는 곳은 COUNT가 0으로 출력
'SQL 알고리즘 코드카타' 카테고리의 다른 글
| SQL 알고리즘 코드카타 25일차(1) 26.01.23(금) (0) | 2026.01.23 |
|---|---|
| SQL 알고리즘 코드카타 24일차(1) 26.01.22(목) (0) | 2026.01.22 |
| SQL 알고리즘 코드카타 23일차(2) 26.01.21(수) (0) | 2026.01.21 |
| SQL 알고리즘 코드카타 23일차(1) 26.01.21(수) (0) | 2026.01.21 |
| SQL 알고리즘 코드카타 22일차(3) 26.01.20(화) (0) | 2026.01.20 |