일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- WITH ROLLUP
- python
- 3기가 마지막이라니..!
- XGBoost
- 캐글 산탄데르 고객 만족 예측
- 데이터 증식
- DENSE_RANK()
- WITH CUBE
- 부트 스트래핑
- 리프 중심 트리 분할
- 인프런
- pmdarima
- lightgbm
- 그로스 해킹
- ARIMA
- 그로스 마케팅
- sql
- 컨브넷
- 로그 변환
- ImageDateGenerator
- 스태킹 앙상블
- tableau
- 캐글 신용카드 사기 검출
- 데이터 정합성
- 마케팅 보다는 취준 강연 같다(?)
- Growth hacking
- 그룹 연산
- 데이터 핸들링
- 분석 패널
- splitlines
- Today
- Total
LITTLE BY LITTLE
[1] 프로그래머스 - SQL 본문
Q1.
대장균들의 자식 수 구하기
# Self Join
https://school.programmers.co.kr/learn/courses/30/lessons/299305
Q.
대장균 개체의 ID(ID)와 자식의 수(CHILD_COUNT)를 출력하는 SQL 문을 작성해주세요. 자식이 없다면 자식의 수는 0으로 출력해주세요. 이때 결과는 개체의 ID 에 대해 오름차순 정렬해주세요.
→ 문제가 헷갈리지만, 자식(ID) 기준으로 같은 부모를 가진 개체가 몇명인지 (사람으로 치면 형제가 몇명인지..) 구하는 것
1. 자식(ID) 기준으로 부모(Parent ID)가 나와있는 형태이기에 부모(Parent ID) 기준 자식(ID)이 보여지도록 변경 필요
2. 자식(ID) 기준으로 부모가 같은 자식 수(=형제) 구하기
PARENT_ID 기준으로 자식의 수를 구해야하므로,
SELF JOIN을 활용해서 현재 ID기준 PARENT_ID → PARENT_ID 기준 ID 출력하기
SELECT *
FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B ON A.ID = B.PARENT_ID
→ A.ID와 PARENT_ID로 SELF JOIN하되, 문제에서 자식이 없어도 출력하라고 되어있었기에 LEFT JOIN (ID기준) 해주기
기존 ID기준 부모 ID
셀프 조인 후 PARENT_ID 기준 ID
→ ID는 1~6 모두 존재했지만, PARNET_ID는 1,2,4으로 3개이기에 부모 기준이니까 나머지에 해당하는(부모가 없는) ID는 null로 나옴
2. 최종 쿼리
SELECT DISTINCT A.ID, COUNT(DISTINCT B.ID) AS CHILD_COUNT
FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B ON A.ID = B.PARENT_ID
GROUP BY A.ID;
✅ 셀프 조인 예제
customer_id를 기준으로 작성된 테이블에서, customer_id에 매핑된 spouse_id 배우자의 성과 이름을 보고자 한다.
원본 테이블
셀프 조인한 테이블
→ id=1인 John의 spouse인 id=2 Mary의 이름도 나온 모습
SELECT
cust.customer_id,
cust.firstname,
cust.lastname,
cust.birthdate,
cust.spouse_id,
spouse.firstname AS spouse_firstname,
spouse_lastname AS spouse_lastname
FROM customer AS cust
INNER JOIN customer AS spouse
ON cust.spouse_id = spouse.customer_id
Q2.
재구매가 일어난 상품과 회원 리스트 구하기
# WHERE과 HAVING 차이 인지
※ 참고
ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요.
-- 재구매의 정의: CNT>1
SELECT user_id, product_id
FROM ONLINE_SALE
GROUP BY user_id, product_id
HAVING COUNT(online_sale_id)>1
ORDER BY user_id ASC, product_id DESC
'프로그래머스' 카테고리의 다른 글
[알고리즘] 정렬 - K번째 수 (3) | 2024.09.07 |
---|---|
[알고리즘] 해시 - 완주하지 못한 선수 (0) | 2024.09.02 |
[알고리즘] 해시 - 폰켓몬 (0) | 2024.09.01 |
[2] 프로그래머스 - SQL (0) | 2024.08.12 |
[1] 프로그래머스 - 영어 끝말잇기 (0) | 2023.11.19 |