상세 컨텐츠

본문 제목

[프로그래머스] 301651. 멸종위기의 대장균 찾기 | MySQL, 재귀 쿼리

Coding Test/문제풀이

by yooputer 2025. 4. 10. 14:55

본문

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 요약

1. 계층형 데이터가 존재한다. 부모가 없으면 1세대, 1세대 부모를 둔 자식은 2세대, 2세대 부모를 둔 자식은 3세대으로 표현한다

2. 세대별로 자식이 없는 row를 카운트하여 조회한다. 


해결 프로세스

  1. 계층형 데이터의 level을 조회한다.
    👉 재귀 with문을 사용하여 level을 조회한다
  2. 자식이 없는 row를 조회한다
    👉 자식row와 LEFT OUTER JOIN하고, 조인되지 않은 row만 필터링한다
  3. 자식이 없는 row들을 level로 그룹핑하여 count를 구한다
    👉 level로 group by하고 count함수를 사용한다

정답 쿼리

WITH RECURSIVE g AS (
	SELECT
		id,
		1 AS GENERATION
	FROM ECOLI_DATA
	WHERE parent_id IS NULL
	UNION ALL
	SELECT
		c.id,
		p.GENERATION + 1
	FROM g p
	JOIN ECOLI_DATA c ON c.parent_id = p.id
)
SELECT
	count(*) AS COUNT,
	GENERATION
FROM g
LEFT OUTER JOIN ECOLI_DATA d ON d.parent_id = g.id
WHERE d.id IS NULL
GROUP BY GENERATION

 

 

관련글 더보기