보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
# 0시 ~ 23시 정보를 가지고 있는 테이블 with recursive tb as ( select 0 HOUR union all select HOUR + 1 from tb where HOUR < 23 ) select tb.HOUR as HOUR ,count(A.ANIMAL_ID) as COUNT from tb left join ANIMAL_OUTS as A # left join을 사용하여 모든 시간대(0~23시)를 출력 on tb.HOUR = hour(A.DATETIME) group by 1 order by 1
위 문제를 풀 때 "모든 시간이 출력될 수 있도록 0시~23시 데이터를 일일이 작성해야 하는 건가??" 라는 생각을 했다.
하지만, 아무리 생각해도 위 방법은 아닌 거 같아서 다른 방법을 찾아봤다.
찾아본 결과 재귀쿼리,계층커리 라고 불리는 WITH RECURSIVE 구문을 알게 되었다.
사용법
with recursive <가상 테이블명> as ( select n <칼럼명> # 초기값 설정 union all select <칼럼명> + m # 초기값 이후 값 설정 from <가상 테이블명> where ~ )
https://school.programmers.co.kr/learn/courses/30/lessons/59413