[SQL문제풀기] 대장균들의 자식의 수 구하기

silver's avatar
Nov 30, 2024
[SQL문제풀기] 대장균들의 자식의 수 구하기
 

문제

 

내가 작성한 정답

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

silver