[프로그래머스] MySQL / 입양 시각 구하기(2)

2024. 1. 12. 14:07Coding/프로그래머스-SQL

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/59413

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

코드

-- 코드를 입력하세요
WITH RECURSIVE TMP AS(
    SELECT 0 AS h
    UNION ALL
    SELECT h+1 FROM TMP WHERE h < 23)

SELECT h, COUNT(ANIMAL_ID) AS COUNT
FROM TMP
    LEFT OUTER JOIN ANIMAL_OUTS ON HOUR(DATETIME) = TMP.h
GROUP BY h
ORDER BY h;

이 문제는 인터넷의 도움(..)을 많이 받았는데 내가 분석해본 결과 다음과 같다. 아무래도 WITH RECURSIVE에 대한 개념이 생소했기 때문이라고 생각한다. 

1. With recursive 테이블은 가상 테이블을 만들면서 가상 테이블 자신을 참조하여 값을 결정할 때 쓰이는 테이블이다. 

2. TMP 테이블로 시간을 만들어주고 그 뒤에 이어지는 JOIN 쿼리문에 TMP 테이블을 참조한다. TMP 테이블을 만든 이유는 각 시간에 대한 기준을 만들기 위함이다. 따라서 LEFT OUTER JOIN을 실시해준다.