https://school.programmers.co.kr/learn/courses/30/lessons/301650
1. Problem
3세대의 대장균의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 이때 결과는 대장균의 ID 에 대해 오름차순 정렬해주세요.
2. Analysis
1. 재귀 쿼리를 사용해서 ID별 계층 LEVEL을 구하는 계산식을 활용하면 3세대 뿐만 아니라 N세대를 구하는 문제가 나왔을 때에도 편하게 풀 수 있을 것이라고 생각함.
WITH RECURSIVE CTE(ID, PARENT_ID, LEVEL) AS
(
SELECT ID, PARENT_ID, 1 -- initial row
FROM ECOLI_DATA ED
WHERE PARENT_ID IS NULL
UNION ALL
SELECT ED.ID, ED.PARENT_ID, CTE.LEVEL + 1
FROM CTE
INNER JOIN ECOLI_DATA ED
ON CTE.ID = ED.PARENT_ID -- 부모 ID를 구함
)
2. 1번에서 구한 재귀 쿼리 테이블을 활용하여, LEVEL = 3 인 ID만 추출
SELECT
ID
FROM CTE
WHERE LEVEL = 3
3. Solution
WITH RECURSIVE CTE(ID, PARENT_ID, LEVEL) AS
(
SELECT ID, PARENT_ID, 1 -- initial row
FROM ECOLI_DATA ED
WHERE PARENT_ID IS NULL
UNION ALL
SELECT ED.ID, ED.PARENT_ID, CTE.LEVEL + 1
FROM CTE
INNER JOIN ECOLI_DATA ED
ON CTE.ID = ED.PARENT_ID -- 부모 ID를 구함
)
SELECT
ID
FROM CTE
WHERE LEVEL = 3
ORDER BY
ID
;
'Algorithm > SQL' 카테고리의 다른 글
[SQL] 프로그래머스 - 업그레이드 할 수 없는 아이템 구하기 (0) | 2024.07.15 |
---|---|
[MySQL] 재귀 (RECURSIVE) 테이블 생성 (0) | 2024.07.13 |
[SQL] 프로그래머스 - 부서별 평균 연봉 조회하기 (0) | 2024.07.13 |
[SQL] 프로그래머스 - 물고기 종류 별 대어 찾기 (0) | 2024.07.13 |
Leetcode SQL 50 - 602. Friend Requests II: Who Has the Most Friends (1) | 2024.03.23 |