[SQL]특정 세대의 대장균 찾기

도리·2025년 3월 6일

문제

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

내 풀이

-- 1세대 2세대 3세대 뽑기
with first_eco as ( # 1세대 
select id 
from ecoli_data
where parent_id is null),
sec_eco as (
select e.id 
from first_eco f    #2세대
join ecoli_data e on e.parent_id = f.id)
select e.id
from sec_eco s
join ecoli_data e on e.parent_id = s.id
order by e.id
  • with as 구문으로 차근차근 뽑았다
  • 처음엔 이런 self join 구조? 가 너무 어려웠는데 join 할때 parent_id = id 이런식으로 뭐가 같은게 뽑혀야하지?라는 생각을하면 풀 수 있다.

-- 4/23 다시 풀어봄

1세대 뽑아서 join 없이 서브쿼리로 한번에 비교하면 안되나?

된다!!! where parent_id in (select id from first_gen) 하믄 됨.

# 3세대 대장균출력
        # parent_id -> null: 1세대 (1,2)
        # parent_id -> 1세대 (1,2) -> 2세대 (3,4,5)
        # parent_id -> 2세대 (3,4,5) -> 3세대 (6,7)
with first_gen as (           
select id 
from ecoli_data
where parent_id is null) # 1,2 추출
,second_gen as (
select id
from ecoli_data
where parent_id in (select id from first_gen))
select id
from ecoli_data
where parent_id in (select id from second_gen)
order by id
profile
인공지능응용학과 졸업예정..

0개의 댓글