데이터베이스 공부/프로그래머스 SQL 문제풀이

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

모항 2025. 3. 27. 23:06

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

 

프로그래머스

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

programmers.co.kr

 

풀이방법

 

2025.03.27

1. LEFT JOIN을 한다.

  • 좌측 테이블: ECOLI_DATA
  • 우측 테이블: ECOLI_DATA를 PARENT_ID 기준으로 GROUP지은 뒤, 각 그룹별 행 수를 COUNT한다. 이때 PARENT_ID가 NULL인 그룹은 만들지 않는다. 즉, HAVING 절을 사용하여 NULL인 경우를 제외해줘야 한다.
  • JOIN 기준: 좌측 테이블의 ID = 우측 테이블의 PARENT_ID
  • 결과: ECOLI_DATA에 자식 개수 열이 추가된 형태의 테이블이 만들어진다.

 

2. JOIN된 테이블에서 필요한 열만 SELECT한다.

  • 좌측 테이블에서, ID를 SELECT
  • 우측 테이블에서, 자식 개수 열을 SELECT

 

3. 자식 개수 열에 COALESCE를 추가한다.

자식이 없는 대장균의 경우, 자식 개수 열에 0이 아니라 NULL이 적혀있다.

따라서 자식 개수가 NULL일 경우를 찾아내어, 0을 넣어줘야 한다.

SELECT문을 적을 때 그냥 자식 개수 열 이름만 적으면 안 되고,

COALESCE(우측_테이블.자식_개수_열, 0) 과 같이 적어야 한다.

 

코드

MySQL(2025.03.27)

-- 코드를 작성해주세요
SELECT A.ID, COALESCE(B.CHILDS, 0) AS CHILD_COUNT
FROM ECOLI_DATA AS A
    LEFT JOIN (
        SELECT PARENT_ID, COUNT(*) AS CHILDS
        FROM ECOLI_DATA
        GROUP BY PARENT_ID
        HAVING CHILDS IS NOT NULL
    ) AS B
    ON A.ID = B.PARENT_ID
ORDER BY A.ID;