코딩 테스트/sql
[SQL] 대장균들의 자식의 수 구하기 풀이
so5663
2024. 11. 2. 11:41
https://school.programmers.co.kr/learn/courses/30/lessons/299305
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
나의 풀이
SELECT
ed.id
,COALESCE(child_counts.cnt, 0) AS CHILD_COUNT
FROM ECOLI_DATA ed
LEFT JOIN (
SELECT
parent_id
,COUNT(*) AS cnt
FROM ECOLI_DATA
WHERE parent_id IS NOT NULL
GROUP BY parent_id
) AS child_counts
ON ed.id = child_counts.parent_id
ORDER BY ed.id;
뭐가 불필요한 서브 쿼리가 있는 것 같아서 구글링을 해서 조금더 나은 쿼리를 짜보았다.
더욱 효율적인 쿼리
다음은 COALESCE와 LEFT JOIN을 활용하면서도 서브쿼리를 최대한 간소화한 쿼리입니다:
SELECT
ed.id
,COUNT(ec.id) AS CHILD_COUNT
FROM ECOLI_DATA ed
LEFT JOIN ECOLI_DATA ec
ON ec.parent_id = ed.id
GROUP BY ed.id
ORDER BY ed.id;
최종 결과
이 쿼리는 각 id에 대해 해당하는 자식의 수를 CHILD_COUNT로 반환합니다.
자식이 없는 경우에도 COUNT가 0을 반환하기 때문에 별도의 COALESCE 함수를 사용할 필요가 없습니다.
이러한 방식은 쿼리의 효율성을 높이면서도 간단하고 직관적인 구조를 유지합니다. 이 방법은 특히 데이터 양이 많을 때 더 빠르게 실행될 수 있습니다.