-- 코드를 작성해주세요
WITH RECURSIVE CTE 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, CTE B
WHERE B.ID = A.PARENT_ID
)
SELECT COUNT(*) AS COUNT , GEN AS GENERATION
FROM CTE
WHERE ID NOT IN (SELECT DISTINCT(PARENT_ID) FROM CTE WHERE PARENT_ID IS NOT NULL)
GROUP BY GEN
ORDER BY GEN;
WITH RECURSIVE는 자기 자신을 참고 할 수 있다.
계속 해서 반복을 돈다. 로우가 없으면 멈춘다.
** IN 구문 쓸 때 주의점: NULL인 ROW가 있으면 전체 결과가 FALSE로 나와 결과가 안나온다. NOT EXIST 구문이나 널체크를 해주는것이 좋다.
'Problem Solving > SQL' 카테고리의 다른 글
테이블에 없는 값 만들기 (0) | 2025.05.15 |
---|---|
STAMPTIMEDIFF(TYPE, START_DATETIME, END_DATETIME ),DATEDIFF(END_DATETIME,START_DATETIME) (0) | 2025.05.14 |
where절에 case when, sub쿼리 (0) | 2024.10.22 |
GROUP BY, FROM절 SUB쿼리 (0) | 2024.10.22 |
[CONCAT] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2024.03.12 |