1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ๋ฐฉ์
ECOLI_DATA๋ ๋ถ๋ชจ-์์๊ฐ์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ์ด๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐ ์ธ๋๋ณ๋ก ์์์ด ์๋ ๊ฐ์ฒด์ ์๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด ์ฌ๊ท CTE๋ฅผ ์ฌ์ฉํด์ ๋์ฅ๊ท ์ ์ธ๋generation)๋ฅผ ๊ณ์ฐํด ์ฃผ์ด์ผ ํ๋ค. WITH RECURSIVE ๋ธ๋ก์ ๋จผ์ ์ง์ ํด ์ฃผ๊ณ , ๋ธ๋ก ๋ฐ๊นฅ์์ ์ธ๋๋ณ๋ก ์์์ด ์๋ ๊ฐ์ฒด์๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง ์ฃผ๋ฉด ๋๋ค.
WITH RECURSIVE ๋ธ๋ก์ ๋ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋๋ฐ,
๋จผ์ , PARENT_ID IS NULL์ธ ์กฐ๊ฑด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ 1์ธ๋(AS GENERATION)๋ฅผ ๊ท์ ํด ์ค๋ค.
๋ ๋ฒ์งธ๋ก ํ ์ผ์, ์ด 1์ธ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก +1์ ํด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์กฐํ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ถ๋ชจ ๊ฐ์ฒด๋ก๋ถํฐ ์์์ ์ธ๋ ์๋ฅผ ๊ณ์ฐ ํด ์ฃผ๋ ๊ฒ์ด๋ค. Generation CTE์ ECOLI_DATA ํ ์ด๋ธ ๊ฐ์ ์ฌ๊ท์ ์ธ INNER JOIN์ ํด ์ค๋ค. ์ด JOIN์ด ์ด๋ป๊ฒ ๋์ํ๋๋ฉด.. ์.. ECOLI_DATA์ PARENT_ID ์ปฌ๋ผ๊ณผ Generation์ ID ์ปฌ๋ผ์ ๊ณ์ ์ฐ๊ฒฐํด์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ์ถ์ ํด ๋๊ฐ๋ ๊ฒ์ด๋ค. ์ฌ๊ท ์กฐ์ธ์ผ๋ก ๊ฐ ๊ฐ์ฒด์ ์ธ๋(GENERATION) ๊ฐ์ด ๊ณ์ฐ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์๋ก ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ UNION ALL์ ํด ์ฃผ๋ฉด ํ ์ด๋ธ ๋ฐ์ผ๋ก ๊ณ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋๋ค.
๊ณ์ธต ์กฐํ ๋ฌธ์ ๋์ค๋ฉด ๊ธฐ์ต ํ ๊ฒ!
1. CTE ๋ธ๋ญ ๋ง๋ค๊ธฐ
2. 0์ธ๋ ํน์ 1์ธ๋ ๊ท์
3. ๋ถ๋ชจ - ์์ ๊ด๊ณ์ ์ปฌ๋ผ์ผ๋ก CTE์ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก INNER JOIN
4. UNION ALL
3. ์ ๋ต์ฝ๋
WITH RECURSIVE Generation AS (
-- ์ต์ด ๋์ฅ๊ท ์ 1์ธ๋๋ก ์ ์
SELECT ID,
PARENT_ID,
SIZE_OF_COLONY,
DIFFERENTIATION_DATE,
GENOTYPE, 1 AS GENERATION
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
-- ๋ถ๋ชจ ๊ฐ์ฒด๋ก๋ถํฐ ์์์ ์ธ๋ ์ ๊ณ์ฐ
SELECT e.ID,
e.PARENT_ID,
e.SIZE_OF_COLONY,
e.DIFFERENTIATION_DATE,
e.GENOTYPE,
g.GENERATION + 1 AS GENERATION
FROM ECOLI_DATA e
INNER JOIN Generation g ON e.PARENT_ID = g.ID
)
-- ๊ฐ ์ธ๋๋ณ๋ก ์์์ด ์๋ ๊ฐ์ฒด ์ ๊ณ์ฐ
SELECT COUNT(*) AS COUNT,
GENERATION
FROM Generation gn
WHERE NOT EXISTS (
SELECT 1
FROM ECOLI_DATA e
WHERE e.PARENT_ID = gn.ID
)
GROUP BY GENERATION
ORDER BY GENERATION
๊ทธ๋ฆฌ๊ณ ์์์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ์ฟผ๋ฆฌ ์ฐ๋๊ฒ ์กฐ๊ธ ์ด๋ ค์ ๋ค.
WHERE e.PARENT_ID = gn.ID ๋`gn.ID`๋ฅผ `๋ถ๋ชจ`๋ก ์ฐธ์กฐํ๋ `์์ ๊ฐ์ฒด`๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ์ฟผ๋ฆฌ์ด๋ค.์ฆ, e.PARENT_ID = gn.ID๋ ECOLI_DATA ํ ์ด๋ธ์์ gn.ID๋ฅผ ๋ถ๋ชจ๋ก ๊ฐ์ง ์์ ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ์กฐ๊ฑด์ธ ๊ฒ์ด๋ค.
NOT EXISTS๋ ๊ฐ์ด ์จ์ฃผ๋ฉด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐ (e.PARENT_ID = gn.ID์ ๋ง๋ ์์์ด ์์ผ๋ฉด), NOT EXISTS๋ TRUE๊ฐ ๋๊ณ , ๊ทธ gn.ID๊ฐ ๊ฒฐ๊ณผ์ ํฌํจ๋๋ค.