[MySQL] RECURSIVE QUREY (재귀 쿼리)

AI Scientist를 목표로!·2023년 1월 11일
0

재귀 쿼리란?

  • 반복적으로 작동될 쿼리
    즉, 어떤 쿼리를 반복적으로 실행
  • 자료들의 계층을 파악하는데 용이

작성 방법

WITH RECURSIVE

  • 임시 테이블을 불러올 때 사용하던 WITH와 함께 작성

  • 테이블들을 합쳐주는 UNION을 사용

WITH RECURSIVE TEMP_NAME (Col1, Col2, …) AS(
		Non_RECURSIVE QUREY
        UNION ALL
        RECURSIVE QUREY
        )
        
SELECT COL1, COL2
FROM TEMP_NAME

예시 풀어보기

프로그래머스 입양 시각 구하기

  • 0 ~ 23시 까지 입양시각별 입양건수를 계산해야함
  • 하지만, 주어진 테이블에는 없는 시간대가 존재함
  • WITH RECURSICE를 사용해 없는 시간대 생성
WITH RECURSIVE tmp1 AS(
    SELECT 0 AS HOUR
    UNION ALL
        SELECT HOUR + 1 
        FROM tmp1
        WHERE HOUR < 23)
        
SELECT tmp1.HOUR
FROM tmp1

  • 기존 테이블에 시간대별 입양건수 확인
  • JOIN절을 통해 병합

--

최종 코드

WITH RECURSIVE tmp1 AS(
    SELECT 0 AS HOUR
    UNION ALL
        SELECT HOUR + 1 
        FROM tmp1
        WHERE HOUR < 23)
    

SELECT tmp1.HOUR, IFNULL(US.count,0)
FROM tmp1
LEFT JOIN (SELECT HOUR(datetime) AS hour, count(DISTINCT(animal_id)) as count
            FROM animal_outs
            GROUP BY 1) AS US ON tmp1.HOUR = US.hour
                
profile
딥러닝 지식의 백지에서 깜지까지

0개의 댓글