[프로그래머스|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;
- 출력하고자 하는 컬럼명을 SELECT절에 작성한다.
- 별칭(AS) 사용 ➡️ CHILD_COUNT 컬럼명으로 출력
- 별칭(AS) 사용 ➡️ CHILD_COUNT 컬럼명으로 출력
- LEFT JOIN을 작성하고, B 테이블의 부모개체 ID가 A 테이블의 ID와 같다는 조건을 ON절에 작성한다.
- 부모개체 ID = ID인 값을 카운트하여 CHID_COUNT로 출력하기 위함
- 부모개체 ID = ID인 값을 카운트하여 CHID_COUNT로 출력하기 위함
- A 테이블의 ID 컬럼을 기준으로 그룹을 분류한다. (GROUP BY)
- 위와 마찬가지로 부모개체 ID = ID인 값을 카운트하기 위함
- 즉, 집계함수(COUNT) 사용 시 그룹화 필요 ⭕️
- 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;
- 서브쿼리를 사용하여 B.PARENT_ID의 값이 A.ID와 같은 값을 때를 카운트한다.
- 이 출력 값을 별칭(AS)을 사용하여 CHILD_COUNT 컬럼명으로 출력
- 위와 달리 서브쿼리를 통해 COUNT한 상황이므로 그룹화 필요 ❌
- JOIN 하는 것과 마찬가지로 각 테이블의 별칭을 작성하여 FROM절에 테이블명을 작성한다.
- ID 컬럼을 기준으로 오름차순한다. (ORDER BY)
- 마찬가지로 조건이 없으므로 오름차순
서브쿼리를 다시 복기할 수 있는 문제였다.
해당 문제의 질문하기를 통해 다른 사람들의 풀이를 보면
각 절차를 잘 정리한 블로그도 많이 찾아볼 수 있다.
이를 참고하면 더욱 이해하기 편할 것이다.
728x90
반응형
'💻코딩 > 💡Programmers' 카테고리의 다른 글
[프로그래머스|JAVA|오늘의 연습문제] 음양 더하기 | 월간 코드 챌린지 시즌2 (0) | 2025.06.20 |
---|---|
[프로그래머스|JAVA|오늘의 연습문제] 추억점수 | Map 사용 ⭕️ (1) | 2025.06.19 |
[프로그래머스|MySQL] 3월에 태어난 여성 회원 목록 출력하기 | DATE_FORMAT, WHERE AND 조건 (0) | 2025.06.19 |
[프로그래머스|JAVA] 의상 | HashMap() (1) | 2025.06.18 |
[프로그래머스|MySQL] 과일로 만든 아이스크림 고르기 | JOIN, WHERE AND 조건 (0) | 2025.06.10 |