ror_coding

[Programmers Lv.4] 특정 세대의 대장균 찾기 - 301650 본문

Coding Test/SQL

[Programmers Lv.4] 특정 세대의 대장균 찾기 - 301650

ro_rdil_31 2025. 1. 4. 13:55
728x90

세대 찾기(LEVEL)을 간단하게 JOIN을 이용하여 풀기 !

 

Question

 

3세대의 대장균의 ID(ID) 를 출력하는 SQL 문을 작성해주세요. 이때 결과는 대장균의 ID 에 대해 오름차순 정렬해주세요.

Point
  • Code 1 : JOIN의 코드 이해를 위한 시각화 자료.
  • 2세대 -> JOIN 1번, 3세대 -> JOIN 2번.

 

Code (After 2509)

 

with recursive cte as(
    select parent_id, id, 1 as lv
    from ECOLI_DATA 
    where parent_id is null
    
    union all
    
    select c.parent_id, c.id, lv + 1
    from cte p
    join ECOLI_DATA c on p.id = c.parent_id
    where lv < 3
)
select id
from cte
where lv = 3
order by 1
;

 

Code 1 : JOIN

 

SELECT A.ID
    FROM ECOLI_DATA AS A
    JOIN ECOLI_DATA AS B ON A.PARENT_ID = B.ID
    JOIN ECOLI_DATA AS C ON B.PARENT_ID = C.ID
    WHERE C.PARENT_ID IS NULL
    ORDER BY 1;

 

Code 2 : My code (CTE)

 

WITH RECURSIVE GENERATION AS(
    SELECT ID, PARENT_ID, 1 AS LV
        FROM ECOLI_DATA
        WHERE PARENT_ID IS NULL
    UNION ALL
    SELECT E.ID, E.PARENT_ID, LV + 1
        FROM ECOLI_DATA E
        JOIN GENERATION G ON E.PARENT_ID = G.ID
)
SELECT ID
    FROM GENERATION
    WHERE LV = 3
    ORDER BY ID

 

now me

On my github
728x90