본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 프로그래머스 - 특정 세대의 대장균 찾기

by kime2 2024. 6. 24.
출처
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

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

 

문제에 대한 해석

조회 : 3세대의 대장쿤 찾기

정렬 : 3세대 대장균의 ID 오름차순

 

풀이(MYSQL)

with gen1 as (
    select id
    from ECOLI_DATA
    where parent_id is null
), -- 1세대 부모 아이디 테이블 : 부모 아이디가 없을 경우
gen2 as(
    select id
    from ECOLI_DATA
    where parent_id in(select id
                  from gen1)-- 2세대 부모아이디 테이블: 자신의 부모가 1세대 아이디일 경우
    )
select id
from ECOLI_DATA
where parent_id in(select id
                  from gen2)
order by id

 

풀이(ORACLE)  > 문제에서는 ORACLE 버전이 없어서 상상으로

select id
from ECOLI_DATA
start with parnet_id is nulll -- parnet_id is null인 것을 시작으로 
cinnect by prior id = parent_id -- id의 부모는 parent_id
where LEVEL = 3 -- 부모레벨을 1을 기준으로 3세대 일때
order by id

 

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

 

  1. WITH절1 : ECOLI_DATA데이블에서  parent_id가 없는 id를 조회하여 1세대 부모 id에 대한 테이블을 만든다 (gen1)
  2. WITH절2: COLI_DATA데이블에서  parent_id가 gen1에 있는 경우를 조회하여 2세대 부모 id에 대한 테이블을 만든다 (gen2)
  3. FROM 절: ECOLI_DATA데이블에서
  4. WHERE 절: parent_id가 gen2에 있는 경우를 필터링 하여 
  5. SELECT 절: id를 조회한다
  6. ORDER BY 절: id 오름차순