728x90
    
    
  SMALL
    프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

-- 드디어 고급 개념인 재귀 CTE를 사용할 차례인 것 같다 !
WITH RECURSIVE HOUR_SERIES AS (
    SELECT 0 AS HOUR
    UNION ALL
    SELECT HOUR + 1
    FROM HOUR_SERIES
    WHERE HOUR < 23
)
SELECT HS.HOUR AS HOUR, COUNT(AO.ANIMAL_ID) AS COUNT
FROM HOUR_SERIES HS LEFT JOIN ANIMAL_OUTS AO ON HS.HOUR = HOUR(AO.DATETIME)
GROUP BY HOUR
ORDER BY HOUR왜 이렇게 풀었을까?
- 최종 결과 테이블을 살펴보면, 0시부터 23시까지의 데이터도 모두 출력해야 함을 확인할 수 있었습니다.
- 간단히 변수 설정(@ 어노테이션 사용)해서 풀 수도 있었지만, 이번 문제에서는 CTE를 사용해보고 싶어서 선택하게 되었습니다.
- 특히나 재귀 CTE를 사용해 먼저 0시를 설정해두고, 재귀하며 조건 달성 시까지 시간을 1씩 더해 최종적인 시간 테이블을 생성할 수 있었습니다.
- 해당 테이블과 문제에서 주어진 테이블을 LEFT JOIN하여 시간 정보만 가져오게끔 하고, 각 동물은 ID로 구분되기 때문에 ID를 COUNT해주었습니다.
- 결과는 깔끔하게 통과 !
728x90
    
    
  LIST
    '알고리즘 문제 풀이 > SQL 고득점 Kit' 카테고리의 다른 글
| 📕 자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.09.30 | 
|---|---|
| 📕 대장균의 크기에 따라 분류하기 2 (0) | 2025.09.26 | 
| 📙 부서별 평균 연봉 조회하기 (2) | 2025.01.30 | 
| 📙 즐겨찾기가 가장 많은 식당 정보 출력하기 (2) | 2025.01.27 | 
| 📙 있었는데요 없었습니다 (2) | 2025.01.23 | 
