728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/301650
- 3세대 대장균의 ID(ID) 를 출력하는 SQL 문 작성
- 결과는 대장균 ID 기준 오름차순 정렬
테이블
ECOLI_DATA |
풀이과정
# 세대 구분 재귀쿼리 만들기
- 재귀쿼리 첫 번째 테이블은 PARENT_ID가 NULL인 1세대의 경우, GENERATION을 1로 명명
- 재귀쿼리 두 번째 테이블부터는 자신의 PARENT_ID가 이전 재귀쿼리 결과 테이블의 ID와 같을 때
GENERATION이 +1씩 되도록 함
1 2 3 4 5 6 7 8 9 10 11 12 13 | WITH RECURSIVE GE AS ( SELECT ID, 1 AS GENERATION FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT A.ID, B.GENERATION + 1 AS GENERATION FROM ECOLI_DATA A, GE B WHERE A.PARENT_ID = B.ID ) | cs |
# 원래 테이블과 세대구분 테이블 조인
- 원래 테이블의 ID가 세대 구분 테이블의 ID와 같을 때 조인되게 함
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | WITH RECURSIVE GE AS ( SELECT ID, 1 AS GENERATION FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT A.ID, B.GENERATION + 1 AS GENERATION FROM ECOLI_DATA A, GE B WHERE A.PARENT_ID = B.ID ) SELECT * FROM ECOLI_DATA A, GE B WHERE A.ID = B.ID | cs |
# 정답
- 3세대 대장균의 ID만 출력하라고 했으므로 WHERE절에 GENERATION = 3 조건 주기
- 문제에서 요구한대로 ID 별로 오름차순 정렬까지 해주면 끝!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | WITH RECURSIVE GE AS ( SELECT ID, 1 AS GENERATION FROM ECOLI_DATA WHERE PARENT_ID IS NULL UNION ALL SELECT A.ID, B.GENERATION + 1 AS GENERATION FROM ECOLI_DATA A, GE B WHERE A.PARENT_ID = B.ID ) SELECT A.ID FROM ECOLI_DATA A, GE B WHERE A.ID = B.ID AND B.GENERATION = 3 ORDER BY A.ID | cs |
728x90
'코딩테스트 > SQL 코드카타' 카테고리의 다른 글
MySQL 프로그래머스 | 헤비 유저가 소유한 장소 (집계함수 없는 GROUP BY절의 결과) (2) | 2024.10.18 |
---|---|
MySQL 프로그래머스 | 멸종 위기의 대장균 찾기 (재귀쿼리로 자식 없는 개체수 구하기) (0) | 2024.10.17 |
MySQL 프로그래머스 | 대장균의 크기에 따라 분류하기 2 (PERCENT_RANK 함수 사용) (1) | 2024.10.11 |
MySQL 프로그래머스 | 부모의 형질을 모두 가지는 대장균 찾기 (비트연산자, IN 활용) (1) | 2024.10.10 |
MySQL 프로그래머스 | 특정 형질을 가지는 대장균 찾기 (비트연산자 활용) (1) | 2024.10.08 |
댓글