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_ID | COUNT |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 4 | 1 |
이제는 이 결과를 기존 테이블과 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
더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗