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

2024. 5. 4. 15:14코딩 테스트

문제

 

 

개념
  • WITH문을 사용하여 PARENT_ID의 개수를 먼저 파악
  • IFNULL을 사용하여 NULL값을 0으로 대체(PARENT가 아닌 ID)
  • ID에 PARENT_ID의 개수를 넣어야 하기 때문에 LEFT JOIN
    • INNER JOIN하면 PARENT가 아닌 ID가 없어짐

 

 

정답
WITH TEMP AS (
    SELECT PARENT_ID, COUNT(*) CNT
    FROM ECOLI_DATA
    GROUP BY 1)
    
SELECT E.ID, IFNULL(T.CNT,0) CHILD_COUNT
FROM ECOLI_DATA E LEFT JOIN TEMP T ON E.ID = T.PARENT_ID
ORDER BY 1

-- 다른 정답
SELECT I.ID, COUNT(P.ID) CHILD_COUNT
FROM ECOLI_DATA I LEFT JOIN ECOLI_DATA P ON I.ID = P.PARENT_ID
GROUP BY 1
ORDER BY 1