YataNox
[My_SQL] Lv.5 멸종위기의 대장균 찾기 본문
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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;
'DB > Programmers SQL' 카테고리의 다른 글
[My_SQL] Lv.2 이름에 el이 들어가는 동물 찾기 (0) | 2024.11.23 |
---|---|
[My_SQL] Lv.2 동명 동물 수 찾기 (0) | 2024.11.23 |
[My_SQL] Lv.4 언어별 개발자 분류하기 (0) | 2024.06.17 |
[My_SQL] Lv.4 우유와 요거트가 담긴 장바구니 (0) | 2024.06.10 |
[My_SQL] Lv.4 취소되지 않은 진료 예약 조회하기 (0) | 2024.06.10 |