Recent Posts
zimslog
[SQL] 재귀적 CTE - WITH RECURSIVE AS 본문
재귀적 CTE - WITH RECURSIVE AS
WITH CTE는 정적 테이블을 만들고,
WITH RECURSIVE CTE는 동적 테이블을 만든다. (자기 자신을 호출하면서 데이터 만듬)
기본 구문)
WITH RECURSIVE cte AS (
SELECT 1 AS n -- 가장 첫번째 행 정의, 한번만 실행
UNION ALL
SELECT n+1 FROM cte -- 두번째부터 마지막 행까지 정의
WHERE n < 5 -- 조건 만족할 때까지만 호출
)
SELECT * FROM cte;
SELECT 문에서 컬럼명 명시하지 않고, 테이블명(컬럼명)으로 지정해주어도 됨. 위 쿼리와 같은 결과
WITH RECURSIVE cte(n) AS (
SELECT 1
UNION ALL
SELECT n+1 FROM cte
WHERE n<5
)
피보나치 수열)
첫째, 둘째 항은 1이고 셋째 항부터는 앞의 두 항의 합으로 계산
1 1 2 3 5 8 13 21 ...
WITH RECURSIVE fibonacci (col1, col2) AS (
SELECT 1, 1
UNION ALL
SELECT col2, col1+col2 FROM fibonacci
WHERE col2 < 50
)
SELECT col1 as 'Fibonacci Numbers'
FROM fibonacci
24시간 0 ~ 23 만들기)
WITH RECURSIVE time24hours AS (
SELECT 0 as hr
UNION ALL
SELECT hr+1 FROM time24hours
WHERE hr < 23
)
SELECT hr FROM time24hours;
'Data Engineering > SQL' 카테고리의 다른 글
[SQL] 프로그래머스 - 상품의 구매한 회원 비율 구하기 (1) | 2025.08.23 |
---|---|
[SQL] 프로그래머스 - 멸종위기의 대장균 찾기 (0) | 2025.08.20 |
[SQL] MySQL 날짜 함수/연산 정리 (0) | 2025.08.19 |
[SQL] Leetcode 180, 511 - 윈도우 함수 (0) | 2025.08.19 |
[SQL] 윈도우 함수 정리 (순위 함수, 집계 함수) (0) | 2025.08.19 |