문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/301650
WITH RECURSIVE ECOLI_GENERATIONS AS (
-- 1. 1세대(기본 세대) 대장균을 초기 설정
SELECT ID, PARENT_ID, 1 AS GENERATION
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
-- 2. 재귀적으로 각 세대 자손을 추가
SELECT E.ID, E.PARENT_ID, EG.GENERATION + 1 AS GENERATION
FROM ECOLI_DATA E
JOIN ECOLI_GENERATIONS EG ON E.PARENT_ID = EG.ID
)
-- 3. 3세대 필터링 및 정렬
SELECT ID
FROM ECOLI_GENERATIONS
WHERE GENERATION = 3
ORDER BY ID;
3세대의 대장균 ID만 추출하려면 각 대장균의 세대를 계산해야 한다.
재귀적 CTE(Common Table Expressions) 활용
SQL에서 재귀적 CTE는 한 레코드의 부모-자식 관계를 통해 트리 구조로 데이터를 조회할 때 적합하다.
+ 복잡한 관계형 데이터를 다룰 때 강력한 기능이다.
재귀적 CTE를 설정하고, 각 ID의 세대를 계산한다.
재귀 조건: PARENT_ID가 NULL인 대장균(1세대)을 먼저 선택한 뒤,
이들을 부모로 갖는 대장균을 찾아 세대를 증가시키며 연결한다.
트리 구조를 따라가며 원하는 세대를 필터링하는 데 효과적이다.
💡 접근 방식 요약
1. 기본 세대를 설정하고, PARENT_ID가 NULL인 대장균(1세대)부터 시작한다.
2. 재귀적으로 부모를 따라가며 자식 ID와 세대를 갱신해 나간다.
3. 최종적으로 3세대만 필터링해 출력한다.
320x100
'PRACTICE > SQL' 카테고리의 다른 글
[MySQL] 4단계 16. FrontEnd 개발자 찾기 (0) | 2025.02.13 |
---|---|
[MySQL] 4단계 15. 자동차 대여 기록 별 대여 금액 구하기 (0) | 2025.02.11 |
[MySQL] 4단계 13. 입양 시각 구하기(2) (0) | 2025.02.09 |
[MySQL] 4단계 12. 오프라인/온라인 판매 데이터 통합하기 (0) | 2025.02.08 |
[MySQL] 4단계 11. 그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2025.02.07 |