DB/Programmers SQL
[My_SQL] Lv.5 멸종위기의 대장균 찾기
에이디/김우진
2024. 6. 17. 14:53
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이전에 아래 글처럼 특정 세대의 대장균을 찾은 적이 있다. 이때 서브쿼리를 재귀처리하여 사용했었는데 문제를 보자마자 일단 재귀로 각 세대를 다 찾아야겠구나 생각이 들었는데 또 다시 코드 노가다를 해야하나 싶었다.
그러다가 RECURSIVE라는 재귀용 함수를 찾았다. (효자다 효자)
RECURSIVE를 통해 각 대장균의 세대를 다 구해주니 너무 편하게 원하는 테이블을 만들었다.
이후 해당 테이블을 셀프 조인하고 세대별로 그룹화 한 뒤 문제를 해결했다.
[My_SQL] 특정 세대의 대장균 찾기
문제 무식하게 데이터를 뽑아냈다...PARENT_ID가 NULL 인 데이터의 ID를 1세대 A라하고 PARENT_ID가 A인 값들을 2세대 B PARENT_ID가 B인 값들을 3세대 C로 판단하여 출력했다.코드WITH GENERATION AS ( SELECT ID
yatanox.tistory.com
코드
WITH RECURSIVE G AS (
SELECT D.ID, PARENT_ID, 1 AS GENERATION
FROM ECOLI_DATA D
WHERE PARENT_ID IS NULL
UNION ALL
SELECT D.ID, D.PARENT_ID, GENERATION + 1
FROM ECOLI_DATA D
INNER JOIN G ON G.ID = D.PARENT_ID
)
SELECT COUNT(*) AS COUNT, G1.GENERATION
FROM G g1 LEFT JOIN G g2 ON g1.ID = g2.PARENT_ID
WHERE g2.ID IS NULL
GROUP BY g1.GENERATION
ORDER BY 2 ASC;