본문 바로가기
[업무 지식]/MySQL

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

by 에디터 윤슬 2025. 2. 25.

링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

정답: Not Exists를 활용한 방법

WITH RECURSIVE Generation AS (
    SELECT ID, PARENT_ID, 1 AS GENERATION
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    UNION ALL
    SELECT e.ID, e.PARENT_ID, g.GENERATION + 1
    FROM ECOLI_DATA e
    JOIN Generation g ON e.PARENT_ID = g.ID
)
SELECT COUNT(*) AS COUNT, GENERATION
FROM Generation g
WHERE NOT EXISTS (
    SELECT 1 
    FROM ECOLI_DATA e 
    WHERE e.PARENT_ID = g.ID
)
GROUP BY GENERATION
ORDER BY GENERATION;

정답: Left join을 활용한 방법

WITH RECURSIVE Generation AS (
    SELECT ID, PARENT_ID, 1 AS GENERATION
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL
    UNION ALL
    SELECT e.ID, e.PARENT_ID, g.GENERATION + 1
    FROM ECOLI_DATA e
    JOIN Generation g ON e.PARENT_ID = g.ID
)
SELECT COUNT(*) AS COUNT, GENERATION
FROM Generation g
LEFT JOIN ECOLI_DATA e ON g.ID = e.PARENT_ID
WHERE e.ID IS NULL
GROUP BY GENERATION
ORDER BY GENERATION;

'[업무 지식] > MySQL' 카테고리의 다른 글

[QCC] Cohort-Analysis SQL  (0) 2025.01.13
[QCC] Query Challenge Cycle  (0) 2025.01.03
[recursive] Print Prime Numbers  (0) 2024.12.13
[recursive] Draw The Triangle  (0) 2024.12.12
[날짜 그룹화] SQL Project Planning  (0) 2024.12.03