LV.4 우유와 요거트가 담긴 장바구니

문제
데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지 알아보려 합니다. 우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 SQL 문을 작성해주세요. 이때 결과는 장바구니의 아이디 순으로 나와야 합니다.
해설
추출해야할 것 cart_id
조건 한 카트에 우유와 요거트가 동시에 담긴 건
정렬 cart_id ASC
1. 예외를 먼저 생각해보자. 장바구니에 정직하게 Milk와 Yogurt가 하나씩 담겨있진 않을 것이다.
- Milk, Milk, Yogurt의 조합이 충분히 가능하다
2. 어쨌든 우유와 요거트가 몇 건이든 담겨있기만 하면되니까 카트별로 중복 아이템 제거를 해도 문제가 없다
3. DISTINCT cart_id, name으로 카트와 품목 기준으로 중복 제거를 해준다
4. 3번의 테이블을 인라인뷰로 만든다
5. WHERE절로 milk와 yogurt만 걸러준다
6. GROUP BY를 cart_id를 기준으로 해준다
7. HAVING절로 장바구니에 담긴 품목 개수가 2개인 <우유와 요거트가 있는> 레코드만 가져온다
8. cart_id를 출력하고 오름차순 정렬한다
이를 구현한 코드는 아래와 같다
SELECT cart_id
FROM (SELECT DISTINCT cart_id, name FROM cart_products) AS distinct_cart
WHERE name = 'Yogurt' Or name ='Milk'
GROUP BY cart_id
HAVING COUNT(name) = 2
ORDER BY cart_id
good
같은 카트에 같은 품목이 있다는 것을 생각못하면 틀리는 문제였다.
https://school.programmers.co.kr/learn/courses/30/lessons/62284
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Development > SQL' 카테고리의 다른 글
| [프로그래머스 스쿨 - MY SQL] 헤비 유저가 소유한 장소 (1) | 2023.12.05 |
|---|---|
| [프로그래머스 스쿨 - MY SQL] 동물 보호 문제 Lv.2 ~ LV.4 (1) | 2023.11.12 |
| [프로그래머스 스쿨 - MY SQL] 헤비 유저가 소유한 장소 (3) | 2023.11.09 |
| [프로그래머스 스쿨 - MYSQL] 자동차 대여 문제 Lv.1 ~Lv.4 (2) | 2023.10.26 |
| [프로그래머스 스쿨 - MYSQL] 이커머스 문제 Lv.2 ~Lv.5 (0) | 2023.10.03 |