출처
문제
대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요
문제에 대한 해석
-- 조회 : 대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)
-- 조건 : 자식이 없는 경우 count는 0
-- 정렬 : id오름차순
풀이(MYSQL)
with parents as (select parent_id , count(id) as CHILD_COUNT
from ECOLI_DATA
where parent_id is not null
group by parent_id
)
select ECOLI_DATA.id, ifnull(parents.CHILD_COUNT,0) as CHILD_COUNT
from ECOLI_DATA
left join parents
on ECOLI_DATA.id = parents.parent_id
order by ECOLI_DATA.id
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- WITH 절: ECOLI_DATA테이블에서 parent_id가 null이 아닌 경우 그룹화 하여 id의 수를 집계하라
- > patents 임시 테이블 : 부모아이디에 따른 자식 수
- FROM 절: ECOLI_DATA테이블과 parents 를 left조인하는데 ECOLI_DATA테이블에서 id와 parents테이블에서patent_id가 같을 경우 조인
- SELECT 절: ECOLI_DATA테이블의 id, parents의 CHILD_COUNT가 null일 경우(자식이 없는 id일 경우) 0으로 대체
parents 테이블 | 정답 테이블 |
실제 부모인 경우인 id와 자식id의 수 > 답은 자식이 없는 id도 모두 있어야 함 |
다른사람 풀이 (self join)
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 1
ORDER BY 1
배운점
- 임시테이블을 만들지 않아도 간단한 쿼리가 있는지 고민
- ifnull(컬럼, 대체할 값)
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] 프로그래머스 - 대장균의 크기에 따라 분류하기 2 (0) | 2024.06.27 |
---|---|
[문제풀이] Leet code - Confirmation Rate (0) | 2024.06.26 |
[문제풀이] 프로그래머스 - 보호소에서 중성화한 동물 (0) | 2024.06.25 |
[문제풀이] 프로그래머스 - 물고기 종류 별 대어 찾기 (0) | 2024.06.25 |
[문제풀이] 프로그래머스 - 특정 세대의 대장균 찾기 (0) | 2024.06.24 |