1. ๋ฌธ์ ์ค๋ช
๋์ฅ๊ท ๋ค์ ์ผ์ ์ฃผ๊ธฐ๋ก ๋ถํํ๋ฉฐ, ๋ถํ๋ฅผ ์์ํ ๊ฐ์ฒด๋ฅผ ๋ถ๋ชจ ๊ฐ์ฒด, ๋ถํ๊ฐ ๋์ด ๋์จ ๊ฐ์ฒด๋ฅผ ์์ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค. ๋ค์์ ์คํ์ค์์ ๋ฐฐ์ํ ๋์ฅ๊ท ๋ค์ ์ ๋ณด๋ฅผ ๋ด์ ECOLI_DATA ํ ์ด๋ธ์ ๋๋ค. ECOLI_DATA ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE ์ ๊ฐ๊ฐ ๋์ฅ๊ท ๊ฐ์ฒด์ ID, ๋ถ๋ชจ ๊ฐ์ฒด์ ID, ๊ฐ์ฒด์ ํฌ๊ธฐ, ๋ถํ๋์ด ๋์จ ๋ ์ง, ๊ฐ์ฒด์ ํ์ง์ ๋ํ๋ ๋๋ค.

์ต์ด์ ๋์ฅ๊ท ๊ฐ์ฒด์ PARENT_ID ๋ NULL ๊ฐ์ ๋๋ค.
๊ฐ ์ธ๋๋ณ ์์์ด ์๋ ๊ฐ์ฒด์ ์(COUNT)์ ์ธ๋(GENERATION)๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ์ธ๋์ ๋ํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์. ๋จ, ๋ชจ๋ ์ธ๋์๋ ์์์ด ์๋ ๊ฐ์ฒด๊ฐ ์ ์ด๋ 1๊ฐ์ฒด๋ ์กด์ฌํฉ๋๋ค.
2. ์ถ๋ ฅ ์์

3. ๋ฌธ์ ๋ต์
WITH RECURSIVE generation AS (
SELECT
e.id,
e.parent_id,
1 AS g
FROM ecoli_data e
WHERE parent_id IS NULL # 1์ธ๋
UNION ALL
SELECT
e.id,
e.parent_id,
g.g + 1 AS g
FROM generation g
JOIN ecoli_data e
ON e.parent_id = g.id
)
SELECT
COUNT(id) AS count,
g AS generation
FROM generation
WHERE id NOT IN (SELECT # ๋ถ๋ชจ๊ฐ ์๋ ๊ฐ์ฒด == ์์์ด ์๋ ๊ฐ์ฒด
parent_id
FROM ecoli_data
WHERE parent_id IS NOT NULL)
GROUP BY generation
ORDER BY generation ASC;'๐ฅ๏ธ ์ฝ๋ฉํ ์คํธ > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [DataLemur] [LinkedIn] Data Science Skills (0) | 2026.03.10 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] [SQL] ์ ๊ทธ๋ ์ด๋ ๋ ์์ดํ ๊ตฌํ๊ธฐ (0) | 2026.03.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [SQL] ํน์ ์ธ๋์ ๋์ฅ๊ท ์ฐพ๊ธฐ (0) | 2026.02.24 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [SQL] ๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 2 (0) | 2026.02.24 |
| [ํ๋ก๊ทธ๋๋จธ์ค] [SQL] ๋์ฅ๊ท ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ถ๋ฅํ๊ธฐ 1 (0) | 2026.02.24 |