문제
내가 작성한 정답
SELECT E.ID , IFNULL(P.CHILD_COUNT,0) CHILD_COUNT
FROM ECOLI_DATA E
LEFT JOIN (
SELECT PARENT_ID ID, COUNT(*) CHILD_COUNT
FROM ECOLI_DATA
WHERE PARENT_ID IS NOT NULL
GROUP BY PARENT_ID
ORDER BY ID ASC
) AS P
ON E.ID=P.ID
ORDER BY E.ID ASC;
처음에 작성한 정답 → CHILD_COUNT가 0이면 출력되는 경우를 생각하지 않음
SELECT PARENT_ID ID, COUNT(ID) CHILD_COUNT
FROM ECOLI_DATA
WHERE PARENT_ID IS NOT NULL
GROUP BY PARENT_ID
ORDER BY ID ASC;
다른 사람들이 작성한 정답
SELECT
e.ID,
COUNT(c.ID) AS CHILD_COUNT
FROM
ECOLI_DATA e
LEFT JOIN
ECOLI_DATA c ON e.ID = c.PARENT_ID
GROUP BY
e.ID
ORDER BY
e.ID;
COUNT 함수는 NULL이 아닌 값의 개수를 세므로, 자식 데이터가 없는 경우에도 결과가
0
이 된다. MYSQL과 ORACLE에서 NULL다루기
ㅤ | MySQL | Oracle | ㅤ |
IFNULL | IFNULL(column_name, 'default_value') | - | 첫 번째 인자가 NULL이면 두 번째 인자를 반환. |
NVL | - | NVL(column_name, 'default_value') | 첫 번째 인자가 NULL이면 두 번째 인자를 반환. |
COALESCE | COALESCE(column1, column2, 'default_value') | COALESCE(column1, column2, 'default_value') | 인자 중 첫 번째로 NULL이 아닌 값을 반환. |
NULLIF | NULLIF(column1, column2) | NULLIF(column1, column2) | 두 인자가 같으면 NULL, 다르면 첫 번째 인자를 반환. |
ISNULL | ISNULL(column_name) | - | 인자가 NULL이면 1, 아니면 0을 반환. |
NVL2 | - | NVL2(column_name, 'Not Null', 'Is Null') | 첫 번째 인자가 NULL이 아니면 두 번째 인자, NULL이면 세 번째 인자를 반환. |
CASE WHEN | CASE WHEN column_name IS NULL THEN 'default_value' ELSE column_name END | CASE WHEN column_name IS NULL THEN 'default_value' ELSE column_name END | NULL 여부에 따라 다른 값을 반환할 수 있음. |
ㅤ | ㅤ | ㅤ | ㅤ |
IS NULL | column_name IS NULL | column_name IS NULL | NULL이면 TRUE를 NULL이 아니면 FALSE를 리턴 |
IS NOT NULL | column_name IS NOT NULL | column_name IS NOT NULL | NULL이면 FALSE를 NULL이 아니면 TRUE를 리턴 |
Share article