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

지누초이·2024년 3월 28일

프로그래머스

목록 보기
23/37
post-thumbnail

문제

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


노트

방금 올라온 따뜻한 문제다.
각 대장균 아이디를 기준으로 자식의 수를 구해야한다.
하지만 우리가 알고 있는 것은 부모의 정보이다.
따라서 부모의 정보를 기준으로 그룹화하여 COUNT(*)를 해야한다.


우선 부모의 정보를 기준으로 그룹화해보자.

SELECT
	PARENT_ID, COUNT(*) AS COUNT
FROM
	ECOLI_DATA
GROUP BY
	PARENT_ID
HAVING
	PARENT_ID IS NOT NULL

그러면 아래와 같이 뜰 것이다

PARENT_IDCOUNT
11
22
41

이제는 이 결과를 기존 테이블과 JOIN 하여
위에 존재하는 것은 COUNT 값으로, 존재하지 않는 것은 0 으로 표기해야한다.


만약 INNER JOIN 을 한다면
ID 가 1, 2, 4 인 것들만 살아남을 것이다.
우리는 나머지 레코드들에 대해서도 표시해야한다.

따라서 LEFT OUTER JOIN 을 해야한다.
다만 LEFT OUTER JOIN 을 하고나면 존재하지 않는 3, 5, 6에 대해서 NULL로 표기될 것이므로 COALESCE( , 0) 을 해야한다.

마지막으로 alias와 정렬을 맞춰준다.


프로그래머스 고득점 Kit을 앞에서부터 풀면서
처음으로 LEFT JOIN을 사용했다.
그래서 이게 정해인지는 모르겠다.
그리고 지금 기준으로는 정렬안하고 제출해도 정답처리가 된다....
아래 새로 나온 문제가 하나 더 있는데 이거는 다 같이 맞왜틀을 왜치는중ㅜㅠ


정답

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

더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗

0개의 댓글