728x90
[프로그래머스][SQL][Lv04] 특정 세대의 대장균 찾기
풀이
처음에 생각 한 방법은 1세대(1,2)에 포함되어있는 2세대(3,4,5)를 추출하여 임시테이블을 생성 후
SELECT t1.*
FROM ecoli_data t1
JOIN ecoli_data t2
ON t1.parent_id = t2.id
WHERE t2.parent_id IS NULL
2세대에 포함되어있는 ID(6,7)를 검색하는 방식으로 쿼리를 작성했다.
WITH temp AS (
SELECT t1.*
FROM ecoli_data t1
JOIN ecoli_data t2
ON t1.parent_id = t2.id
WHERE t2.parent_id IS NULL
)
SELECT e.id
FROM ecoli_data e
JOIN temp t
ON e.parent_id = t.id;
다른 사람들의 풀이를 보니 RECURSIVE를 사용해서 풀이를 하는 방법도 있는 것 같다..
(이해하기가 어렵긴 하지만 😥)
정답
-- 1. join 2번 사용
WITH temp AS (
SELECT t1.*
FROM ecoli_data t1
JOIN ecoli_data t2
ON t1.parent_id = t2.id
WHERE t2.parent_id IS NULL
)
SELECT e.id
FROM ecoli_data e
JOIN temp t
ON e.parent_id = t.id;
-- 2. RECURSIVE 사용
WITH RECURSIVE Generation AS (
-- 초기 조건: 첫 번째 세대 (PARENT_ID가 NULL인 개체)
SELECT ID, PARENT_ID, 1 AS Gen
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
UNION ALL
-- 재귀적 조건: 다음 세대 찾기
SELECT e.ID, e.PARENT_ID, g.Gen + 1 AS Gen
FROM ECOLI_DATA e
INNER JOIN Generation g ON e.PARENT_ID = g.ID
)
-- 최종 결과 선택: 3세대 개체의 ID
SELECT ID
FROM Generation
WHERE Gen = 3
ORDER BY ID;
반응형
'🧾 Codetest > 프로그래머스' 카테고리의 다른 글
[프로그래머스][SQL][Lv05] 멸종위기의 대장균 찾기 (1) | 2024.09.10 |
---|---|
[프로그래머스][SQL][Lv03] 대장균들의 자식의 수 구하기 (0) | 2024.07.30 |
[프로그래머스][SQL][Lv03] 물고기 종류 별 대어 찾기 (0) | 2024.03.19 |
[프로그래머스][SQL][Lv02] 조건에 맞는 사원 정보 조회하기(서브쿼리) (0) | 2024.03.13 |
[프로그래머스][SQL][Lv02] 조건에 맞는 개발자 찾기(&) (0) | 2024.03.08 |