본문 바로가기
SQL

[프로그래머스/MySQL] 대장균들의 자식의 수 구하기 (LEFT JOIN + COUNT 응용)

by 나룽나룽 2025. 4. 6.

오늘의 문제풀이 ~ ^ㅁ^

프로그래머스 코딩테스트 연습에 있는 

<대장균들의 자식의 수 구하기> 입니다.

 

이 문제에서 포인트는

자기 테이블을 LEFT JOIN으로 조인하고

조건에 맞는 개체 수를 세서 COUNT 함수를 응용할 줄 알아야합니다. 

 

https://school.programmers.co.kr/learn/courses/30/lessons/299305

 

프로그래머스

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

programmers.co.kr

 


 

🧩 문제 설명

ChatGPT 생성 이미지

 

이번 문제는 실험실에서 배양한 대장균 개체들 간의 부모-자식 관계를 분석하는 SQL 문제입니다.
각 대장균 개체 가 몇 개의 자식을 가지고 있는지를 구해야 합니다.

 

📋 테이블 설명

테이블 이름: ECOLI_DATA

ID 대장균 고유 ID
PARENT_ID 부모 대장균 ID (NULL이면 최초 개체)
SIZE_OF_COLONY 개체의 크기
DIFFERENTIATION_DATE 분화된 날짜
GENOTYPE 형질 번호

✅ 요구사항

  • 모든 대장균 개체의 ID에 대해,
    • 자식 개체 수(CHILD_COUNT)를 구해야 함
  • 자식이 없는 경우에도 0으로 표시되어야 함
  • 결과는 ID 기준으로 오름차순 정렬

 

💡 문제 접근 방법

1. 부모-자식 관계를 표현하기 위해 자기 자신과 JOIN

  • 자식의 PARENT_ID부모의 ID와 같음
  • E1은 모든 개체, E2는 자식 개체라고 할 때,
    → 즉, E1.ID = E2.PARENT_ID로 조인

2. 모든 개체가 결과에 있어야 하므로 LEFT JOIN

  • 자식이 없는 경우도 포함해야 하니까, LEFT JOIN으로 조인

3. 자식 수 세기: COUNT(E2.ID)

  • COUNT는 NULL을 세지 않음
    → 자식이 없는 경우 자동으로 0이 됨

 

✅ 최종 SQL 코드

SELECT E1.ID
        , COUNT(E2.ID) AS CHILD_COUNT
FROM ECOLI_DATA E1
LEFT JOIN ECOLI_DATA E2 ON E1.ID = E2.PARENT_ID
GROUP BY 1