본문 바로가기
빅데이터 공부/SQL

[프로그래머스 / MySQL / Lv.3 대장균들의 자식의 수 구하기]

by waggish 2025. 3. 14.
  • 문제설명


  • 문제


  • 풀이

👉 ECOLI_DATA테이블이 아래와 같을 때 개체 ID별 자식의 수를 출력하는 문제이므로

 

1. PARENT_ID를 기준으로 그룹화하여 자식 개체의 개수 세기

SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
FROM ECOLI_DATA
GROUP BY PARENT_ID

 

2.  ECOLI_DATA 테이블과 위에서 만든 서브쿼리를 LEFT JOIN함

SELECT A.ID, B.CHILD_COUNT
FROM ECOLI_DATA A
LEFT JOIN (SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
   	   FROM ECOLI_DATA
    	   GROUP BY PARENT_ID) B
ON A.ID = B.PARENT_ID
ORDER BY A.ID;

👉 A.ID = B.PARENT_ID 를 기준으로 LEFT JOIN하면 각 ID별로 자식의 수가 매칭됨

      단, 자식이 없는 ID 3, 5, 6은 NULL값을 나옴

 

3. IFNULL()을 이용하여 NULL값을 0으로 대체(MySQL에서만 사용가능)

SELECT A.ID, IFNULL(B.CHILD_COUNT, 0) AS CHILD_COUNT
FROM ECOLI_DATA A
LEFT JOIN (SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
           FROM ECOLI_DATA
           GROUP BY PARENT_ID)B
ON A.ID = B.PARENT_ID
ORDER BY ID;

 

📌 IFNULL() 대신 COALESCE()도 사용 가능

SELECT A.ID, COALESCE(B.CHILD_COUNT, 0) AS CHILD_COUNT
FROM ECOLI_DATA A
LEFT JOIN (SELECT PARENT_ID, COUNT(*) AS CHILD_COUNT
           FROM ECOLI_DATA
           GROUP BY PARENT_ID) B
ON A.ID = B.PARENT_ID
ORDER BY A.ID;

EX)  COALESCE(NULL, 'A', 'B') : 왼쪽부터 차례로 확인하며 첫 번째 NULL이 아닌 값을 반환

 👉 만약,  COALESCE(NULL, NULL , NULL ) 모든 값이 NULL이라면 NULL을 반환


  • 실행결과