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

문제 풀이

재귀 쿼리를 연습해 볼 수 있는 문제인 것 같다.

  1. 재귀 쿼리로 0시에서 23시까지 생성하는 테이블을 만든다.
  2. 재귀 쿼리로 만든 가상의 테이블과 ANIMAL_OUTS 테이블을 조인한다. 이때 입양이 발생하지 않는 경우에도 0건으로 조회해야 하기 때문에 LEFT JOIN으로 조인해 준다.
  3. 시간대별로 그룹핑한다.
  4. 시간대와 COUNT 키워드로 시간대별 입양 건수를 조회한다. 이때 LEFT JOIN이기 때문에 IFNULL 키워드를 같이 사용하여 입양 건수가 0인 조회 결과를 처리한다.
  5. 시간대를 기준으로 오름차순 정렬한다.
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