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

난이도 중상
화낼거양's avatar
Dec 09, 2024
[SQL 문제 풀기] 대장균들의 자식 수 구하기
Contents
문제정답
 
 
 
 

문제

 
notion image
notion image
 
 

정답

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

1. 서브쿼리

서브쿼리는 PARENT_ID가 존재하는 레코드들을 그룹화하고, 각 PARENT_ID에 대해 자식 레코드의 수를 계산합니다.
 
(SELECT PARENT_ID, COUNT(*) AS COUNT FROM ECOLI_DATA GROUP BY PARENT_ID HAVING PARENT_ID IS NOT NULL) AS B
 
  • SELECT PARENT_ID, COUNT(*) AS COUNT: PARENT_ID와 그 PARENT_ID를 가진 레코드의 수를 선택합니다.
  • FROM ECOLI_DATA: ECOLI_DATA 테이블에서 데이터를 가져옵니다.
  • GROUP BY PARENT_ID: PARENT_ID별로 그룹화합니다.
  • HAVING PARENT_ID IS NOT NULL: PARENT_IDNULL이 아닌 그룹만 선택합니다.
  • AS B: 서브쿼리의 결과를 B라는 별칭으로 사용합니다.
 

2. 외부 쿼리

외부 쿼리는 기본 테이블인 ECOLI_DATA와 서브쿼리의 결과를 LEFT JOIN하여 최종 결과를 반환합니다.
 
SELECT A.ID, COALESCE(B.COUNT, 0) AS CHILD_COUNT FROM ECOLI_DATA AS A LEFT JOIN ( ... ) AS B ON A.ID = B.PARENT_ID ORDER BY ID;
 
  • SELECT A.ID, COALESCE(B.COUNT, 0) AS CHILD_COUNT:
    • A.ID: 기본 테이블 ECOLI_DATAID를 선택합니다.
    • COALESCE(B.COUNT, 0) AS CHILD_COUNT: 서브쿼리에서 계산된 자식 레코드 수(COUNT)를 선택합니다. 만약 COUNTNULL이면 0으로 반환합니다.
  • FROM ECOLI_DATA AS A: ECOLI_DATA 테이블을 A라는 별칭으로 사용합니다.
  • LEFT JOIN: 기본 테이블 A와 서브쿼리 결과 B를 LEFT JOIN 합니다.
  • ON A.ID = B.PARENT_ID: A.IDB.PARENT_ID가 일치하는 레코드를 조인합니다.
  • ORDER BY ID: 결과를 ID 기준으로 정렬합니다.
Share article

moohyun