[프로그래머스|MySQL] 대장균들의 자식의 수 구하기 | 2가지 방법 ⭕️ | COUNT(), LEFT JOIN, 서브쿼리

2025. 6. 19. 15:29💻코딩/💡Programmers

728x90
반응형

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.

 

 


 

# [방법 1] LEFT JOIN
SELECT A.ID, COUNT(B.PARENT_ID) AS CHILD_COUNT FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B ON B.PARENT_ID = A.ID
GROUP BY A.ID 
ORDER BY A.ID;
  1.  출력하고자 하는 컬럼명을 SELECT절에 작성한다.
    • 별칭(AS) 사용 ➡️ CHILD_COUNT 컬럼명으로 출력

  2. LEFT JOIN을 작성하고, B 테이블의 부모개체 ID가 A 테이블의 ID와 같다는 조건을  ON절에 작성한다. 
    • 부모개체 ID = ID인 값을 카운트하여 CHID_COUNT로 출력하기 위함

  3. A 테이블의 ID 컬럼을 기준으로 그룹을 분류한다. (GROUP BY)
    • 위와 마찬가지로 부모개체 ID = ID인 값을 카운트하기 위함
    • 즉, 집계함수(COUNT) 사용 시 그룹화 필요 ⭕️

  4. ID 컬럼을 기준으로 오름차순한다. (ORDER BY)
    • 조건이 없으므로 오름차순

 

 

# [방법 2] 서브쿼리
SELECT A.ID, (SELECT COUNT(*) FROM ECOLI_DATA B
           WHERE B.PARENT_ID = A.ID) AS CHILD_COUNT
FROM ECOLI_DATA A
ORDER BY A.ID;
  1. 서브쿼리를 사용하여 B.PARENT_ID의 값이 A.ID와 같은 값을 때를 카운트한다. 
    • 이 출력 값을 별칭(AS)을 사용하여 CHILD_COUNT 컬럼명으로 출력
    • 위와 달리 서브쿼리를 통해 COUNT한 상황이므로 그룹화 필요 ❌

  2. JOIN 하는 것과 마찬가지로 각 테이블의 별칭을 작성하여 FROM절에 테이블명을 작성한다.

  3. ID 컬럼을 기준으로 오름차순한다. (ORDER BY)
    • 마찬가지로 조건이 없으므로 오름차순

 

 


 

서브쿼리를 다시 복기할 수 있는 문제였다.

해당 문제의 질문하기를 통해 다른 사람들의 풀이를 보면

각 절차를 잘 정리한 블로그도 많이 찾아볼 수 있다.

이를 참고하면 더욱 이해하기 편할 것이다.

 

 

 

728x90
반응형