[SQL 고득점 Kit] 입양 시각 구하기(2)

썹스·2024년 3월 21일

❓ 문제

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 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 ~
)


🔗 Reference

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

profile
코린이

0개의 댓글