본문 바로가기
Algorithm/Programmers SQL

[MySQL] 프로그래머스 멸종위기의 대장균 찾기

by 제우제우 2024. 9. 19.

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > SELECT > 멸종위기의 대장균 찾기

 

문제 분석

난이도: LEVEL5

 

문제 요구사항

각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문을 작성해주세요. 

이때 결과는 세대에 대해 오름차순 정렬해주세요. 단, 모든 세대에는 자식이 없는 개체가 적어도 1개체는 존재합니다.

 

정답 코드 

WITH RECURSIVE ECOLI_DATA_GENERATION AS ( -- 세대 추가 
    SELECT ID, PARENT_ID, 1 GENERATION
    FROM ECOLI_DATA
    WHERE PARENT_ID IS NULL 
    
    UNION ALL
    
    SELECT D.ID, D.PARENT_ID, GENERATION + 1
    FROM ECOLI_DATA D JOIN ECOLI_DATA_GENERATION G 
    ON G.ID = D.PARENT_ID 
),
ECOLI_DATA_GENERATION2 AS ( -- 자식 개수 추가 
    SELECT ID, PARENT_ID, GENERATION, (SELECT COUNT(*)
                                       FROM ECOLI_DATA_GENERATION  D
                                       WHERE G.ID = D.PARENT_ID) CHILD_COUNT
    FROM ECOLI_DATA_GENERATION G
)
SELECT COUNT(*) COUNT, GENERATION 
FROM ECOLI_DATA_GENERATION2
WHERE CHILD_COUNT = 0
GROUP BY GENERATION 
ORDER BY 2