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;