728x90
WITH RECURSIVE 문
WITH RECURSIVE 쿼리문을 작성하고 내부에 UNION을 통해 재귀를 구성
- 예시 - 1씩 증가
WITH RECURSIVE CNT
AS (
-- Non-Recursive 문장( 첫번째 루프에서만 실행됨 )
SELECT 1 AS n
UNION ALL
-- Recursive 문장
SELECT n + 1 AS num
FROM CNT
WHERE n < 5
)
SELECT * FROM CNT;
https://school.programmers.co.kr/learn/courses/30/lessons/301651?language=mysql
- 문제
- 각 세대별 자식이 없는 개체의 수(COUNT)와 세대(GENERATION)를 출력하는 SQL문
- 풀이
- 재귀를 사용해서 각 대장균의 세대 구하기
- GENERATION 테이블
- (ID, 부모ID, N세대)
- GENERATION 테이블
- GENERATION 테이블에서 자식이 없는 대장균 => PARENT_ID 컬럼에 ID가 없다.
- 재귀를 사용해서 각 대장균의 세대 구하기
- 코드
# 재귀 사용
# (ID, 부모ID, N세대)
WITH RECURSIVE GENERATION AS (
SELECT ID
, PARENT_ID
, 1 AS GEN
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
SELECT E.ID
, E.PARENT_ID
, GEN + 1 AS GEN
FROM ECOLI_DATA E
JOIN GENERATION G
ON E.PARENT_ID = G.ID
)
SELECT COUNT(*) AS COUNT
, GEN AS GENERATION
FROM GENERATION
# 자식이 없다
WHERE ID NOT IN (SELECT DISTINCT PARENT_ID FROM GENERATION WHERE PARENT_ID IS NOT NULL)
GROUP BY GEN;
728x90
반응형
'TIL - 프로그래밍 > SQL' 카테고리의 다른 글
[CodeSignal] security Breach - MySQL (0) | 2024.06.28 |
---|---|
[해커랭크] Interviews - MySQL (0) | 2024.06.14 |
[프로그래머스] LV3. 대장균의 크기에 따라 분류하기 2 - MySQL (0) | 2024.06.10 |
[프로그래머스] LV4. 우유와 요거트가 담긴 장바구니 - MySQL (0) | 2024.06.09 |
[프로그래머스] LV3. 물고기 종류 별 대어 찾기 - MySQL (0) | 2024.05.28 |
댓글