250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 셀프조인
- 서브쿼리
- SQL고득점KIT
- 윈도우함수
- UNION
- 데이터분석
- 코딩테스트
- levle1
- 프로그래머스문풀
- 위키독스
- GROUPBY
- sql문풀
- SQL
- 코테
- with절
- leetcode
- 데이터리안
- 프로그래머스
- SQL테스트
- join
- leetcode문풀
- case문
- if문
- 활성사용자수
- 파이썬
- mysql
- 문풀
- 파이썬문풀
- 그로스해킹
- 약수구하기
Archives
- Today
- Total
꿈은 데이터분석가, 취미는 계획
[MY SQL] 대장균의 자식의 수 구하기(SELF JOIN, 서브쿼리, WITH절 사용방법) 본문
728x90
출처: [프로그래머스 스쿨 - 코딩테스트 연습 - MY SQL 문제] : 그룹별 조건에 맞는 식당 목록 출력하기
링크: https://school.programmers.co.kr/learn/courses/30/lessons/299305
문제(일부): 대장균 개체의 ID와 자식의 수를 출력하는 쿼리 작성, 자식이 없다면 0으로 출력
1. SELF JOIN 사용하기
1) 동일한 테이블을 다른 별칭을 주어서 사용하는 SELF JOIN사용
2) JOIN 조건으로 e1테이블의 ID = e2테이블의 PARENT_ID, 해당 ID를 부모로 가지는 자식을 JOIN
3) LEFT를 사용하여 자식이 없어도 조회되도록 함
SELECT e1.ID, COUNT(e2.PARENT_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
2. 서브쿼리 사용하기
JOIN조건을 서브쿼리의 WHERE절에 사용, 자식이 있는 ID를 COUNT하는 서브쿼리 생성
SELECT ID,
(SELECT COUNT(ID)
FROM ECOLI_DATA
WHERE PARENT_ID = ED.ID)
AS CHILD_COUNT
FROM ECOLI_DATA ED
ORDER BY ID ASC
3. WITH절 사용하기
1) PARENT_ID로 GROUP BY하여 PARENT_ID별 자식수를 COUNT하는 WITH절 생성
2) 메인쿼리에서 원본 테이블과 WITH절을 JOIN하여 ID별 자식수를 조회
3) COALESCE로 NULL이면 0을 반환하게 함
3) 조인 시 RIGHT로 자식이 없는 것도 조회되도록 함
WITH CTE AS(
SELECT PARENT_ID AS ID,
COUNT(*) AS CHILD_COUNT
FROM ECOLI_DATA
GROUP BY PARENT_ID
) # 자식의 수를 COUNT하는 WITH절 생성
SELECT ED.ID,
COALESCE(CTE.CHILD_COUNT,0) AS CHILD_COUNT
# COALESCE는 NULL이 아닌 첫번쨰 값을 반환
# CHILD_COUNT가 NULL이면 0을 반환
FROM CTE
RIGHT JOIN ECOLI_DATA ED ON CTE.ID = ED.ID
# RIGHT JOIN을 해야 자식이 없는 것도 포함
ORDER BY ED.ID ASC
728x90
'SQL > sql문풀' 카테고리의 다른 글
[MY SQL] 오프라인/온라인 데이터 통합하기(UNION) (0) | 2024.07.28 |
---|---|
[MY SQL 업그레이드 할 수 없는 아이템 구하기(SELF JOIN) (0) | 2024.07.28 |
[MY SQL] 2개를 모두 담은 ID찾기(우유와 요거트가 담긴 장바구니) (0) | 2024.07.26 |
[MY SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회 (0) | 2024.07.26 |
[MY SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.07.26 |