728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/301651
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

풀이
WITH RECURSIVE GEN AS (
SELECT
ID,
PARENT_ID,
1 AS GEN
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
SELECT
A.ID,
A.PARENT_ID,
B.GEN + 1
FROM ECOLI_DATA A
JOIN GEN B ON A.PARENT_ID = B.ID
)
SELECT
COUNT(*) AS COUNT,
GEN AS GENERATION
FROM GEN
WHERE ID NOT IN (
SELECT PARENT_ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NOT NULL
)
GROUP BY GEN
ORDER BY GEN
첨엔
with as 1 (
select id
from ECOLI_DATA
where PARENT_ID is null
)
with as 2
(select id
from ECOLI_DATA
where PARENT_ID = 1. id)
세대별로 하드코딩중이였는데 이건 아닌거 같아서 찾아보니 재귀 쿼리를 이용하면 된다
재귀란 함수를 반복문 처럼 종료조건까지 자기자신을 호출해 반복해서 처리해주는것
WITH RECURSIVE <임시_테이블_이름>(컬럼1, 컬럼2, ...) AS (
-- 1. 앵커 멤버 (Anchor Member): 재귀의 시작점
SELECT ...
FROM ...
WHERE <시작_조건>
UNION ALL
-- 2. 재귀 멤버 (Recursive Member): 반복될 부분
SELECT ...
FROM <원본_테이블>
INNER JOIN <임시_테이블_이름> ON <연결_조건> -- 자기 자신을 다시 참조
)
-- 3. 최종 쿼리: 위에서 만든 임시 테이블을 사용
SELECT * FROM <임시_테이블_이름>;
이런 형식이다 시작점 잡고 그후 쿼리가 조건이 충족되는한 게속 반복
728x90
'문제풀이 > SQL' 카테고리의 다른 글
| 대장균의 크기에 따라 분류하기 2 (0) | 2025.08.01 |
|---|---|
| 부모의 형질을 모두 가지는 대장균 찾기 (0) | 2025.07.15 |
| 월별 잡은 물고기 수 구하기 (1) | 2025.07.15 |
| 월별 잡은 물고기 수 구하기 (0) | 2025.07.14 |
| 물고기 종류 별 잡은 수 구하기 (1) | 2025.07.14 |
댓글