SQL/프로그래머스 문제풀이

[SELECT] 멸종위기의 대장균 찾기

너지살 2024. 4. 29. 12:45

 

 

 

문제 출저

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

 

프로그래머스

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

programmers.co.kr

 

 

 

문제 풀이

각 세대별 자식이 없는 대장균의 ID를 구해야 합니다. 

재귀 WITH인 WITH RECURSIVE를 사용합니다. WITH RECURSIVE의 형태는 초기값과 재귀 조인의 UNION ALL 한 형태로 사용합니다. WITH RECURSIVE를 통해 세대별 대장균의 자식을 구한 다음 LEFT JOIN으로 부모와 자식을 조인합니다. 그 후 자식의 PARENT_ID가 NULL인 것을 출력하여 자식이 없는 대장균 ID를 구합니다. 

 

 

SQL

WITH RECURSIVE HISTORY AS (

    SELECT
        ID, PARENT_ID, 1 AS GENERATION
    FROM
        ECOLI_DATA
    WHERE 
        PARENT_ID IS NULL 
    
    UNION ALL 
    
    SELECT 
        E.ID, E.PARENT_ID, H.GENERATION + 1 
    FROM
        ECOLI_DATA AS E 
    INNER JOIN 
        HISTORY AS H ON E.PARENT_ID = H.ID 
)

SELECT
    *
FROM
    HISTORY AS PARENT
LEFT JOIN
    HISTORY AS CHILD ON PARENT.ID = CHILD.PARENT_ID
WHERE
    CHILD.PARENT_ID IS NULL 
ORDER BY
    PARENT.GENERATION