링크:  https://school.programmers.co.kr/learn/courses/30/lessons/301651

 

습득한 점:

재귀함수 사용법

활용 아이디어

 


 


 

재귀함수 쿼리 

WITH RECURSIVE CTE(ID,PARENT_ID,GEN_N) as (

    SELECT
        ID,
        PARENT_ID,
        1 AS GEN_N
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    
    UNION ALL -- 중복 미제거 통합, 재귀에서는 거의 항상 UNION ALL 사용
    
    SELECT
        r.ID,
        r.PARENT_ID,
        cte.GEN_N + 1 AS GEN_N
    FROM ECOLI_DATA r
        INNER JOIN cte ON r.PARENT_ID = cte.ID
)


SELECT
    *
    # COUNT(A.GEN_N) AS COUNT,
    # A.GEN_N AS GENERATION
FROM cte AS A
    LEFT JOIN cte AS B ON A.ID = B.PARENT_ID
# WHERE B.PARENT_ID IS NULL
# GROUP BY A.GEN_N
# ORDER BY GENERATION ASC;

 


1. 재귀함수로 각 ID별 세대를 GEN_ID라는 컬럼으로 생성한다.

 

2. ID별 세대를 조건에 맞춰 지정 후, 
셀프 조인(A테이블, B테이블)을 통해,  ID와  PARENT_ID가 서로 일치하는 조건으로  LEFT 조인을 한다.

   -> 자식이 존재하지 않는 ID를 찾기 위함

 

이후, B테이블의 ID가  "NULL" 인 값만을 찾도록 조건을 걸고, A테이블의 GEN_ID(세대)를 기준으로 그룹화하되, 그룹별 카운트를 한다.

+ Recent posts