inblog logo
|
moohyun
    SQL문제풀기

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

    난이도 중상
    화낼거양's avatar
    화낼거양
    Dec 09, 2024
    [SQL 문제 풀기] 대장균들의 자식 수 구하기
    Contents
    문제정답
     
     
    출처 : https://school.programmers.co.kr/learn/courses/30/lessons/299305
     
     

    문제

     
    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_ID가 NULL이 아닌 그룹만 선택합니다.
    • 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_DATA의 ID를 선택합니다.
      • COALESCE(B.COUNT, 0) AS CHILD_COUNT: 서브쿼리에서 계산된 자식 레코드 수(COUNT)를 선택합니다. 만약 COUNT가 NULL이면 0으로 반환합니다.
    • FROM ECOLI_DATA AS A: ECOLI_DATA 테이블을 A라는 별칭으로 사용합니다.
    • LEFT JOIN: 기본 테이블 A와 서브쿼리 결과 B를 LEFT JOIN 합니다.
    • ON A.ID = B.PARENT_ID: A.ID와 B.PARENT_ID가 일치하는 레코드를 조인합니다.
    • ORDER BY ID: 결과를 ID 기준으로 정렬합니다.
    Share article
    Contents
    문제정답

    moohyun

    RSS·Powered by Inblog