https://school.programmers.co.kr/learn/courses/30/lessons/299305
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다.
다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.

최초의 대장균 개체의 PARENT_ID 는 NULL 값입니다.
문제
대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.
문제 접근
1. 같은 테이블 내에서 id와 parent_id의 일치 여부를 찾아야하니까 self join
2. 자식 개체의 수를 세야하니까 count, 칼럼명은 as로 변경해서
3. aggregation을 하려면 groupby가 꼭 들어가야 함
4. 오름차순 정렬
최종 코드
SELECT e1.id, COUNT(e2.id) AS CHILD_COUNT
FROM ecoli_data AS e1
LEFT JOIN ecoli_data as e2 ON e1.id = e2.parent_id
GROUP BY e1.id
ORDER BY e1.id
+) 또 다른 풀이 (self join 대신 서브쿼리 활용)
SELECT e1.id,
(SELECT COUNT(*)
FROM ecoli_data e2
WHERE e2.parent_id = e1.id) AS CHILD_COUNT
FROM ecoli_data e1
ORDER BY e1.id;
'SQL > 프로그래머스·HackerRank·Leetcode' 카테고리의 다른 글
| 프로그래머스 SQL - 성분으로 구분한 아이스크림 총 주문량 (0) | 2025.09.23 |
|---|---|
| 프로그래머스 SQL - 조건에 맞는 도서와 저자 리스트 출력하기 (0) | 2025.09.23 |
| 프로그래머스 SQL - 특정 물고기를 잡은 총 수 구하기 (0) | 2025.09.22 |
| HackerRank SQL 3문제 풀이 (3) (0) | 2025.02.04 |
| 프로그래머스 SQL - 조건에 맞는 사원 정보 조회하기 (0) | 2025.01.28 |