SQL/GROUP BY
[프로그래머스 SQL] Lv.4 - 입양 시각 구하기(2)
이런개발
2025. 4. 3. 09:03
https://school.programmers.co.kr/learn/courses/30/lessons/59413
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
재귀 쿼리를 연습해 볼 수 있는 문제인 것 같다.
- 재귀 쿼리로 0시에서 23시까지 생성하는 테이블을 만든다.
- 재귀 쿼리로 만든 가상의 테이블과 ANIMAL_OUTS 테이블을 조인한다. 이때 입양이 발생하지 않는 경우에도 0건으로 조회해야 하기 때문에 LEFT JOIN으로 조인해 준다.
- 시간대별로 그룹핑한다.
- 시간대와 COUNT 키워드로 시간대별 입양 건수를 조회한다. 이때 LEFT JOIN이기 때문에 IFNULL 키워드를 같이 사용하여 입양 건수가 0인 조회 결과를 처리한다.
- 시간대를 기준으로 오름차순 정렬한다.
WITH RECURSIVE HOURS AS (
SELECT 0 AS HOUR
UNION ALL
SELECT HOUR + 1
FROM HOURS
WHERE HOUR < 23
)
SELECT
H.HOUR,
IFNULL(COUNT(A.ANIMAL_ID), 0) AS COUNT
FROM
HOURS AS H
LEFT JOIN ANIMAL_OUTS AS A ON H.HOUR = HOUR(A.DATETIME)
GROUP BY
1
ORDER BY
1