✔️문제 포인트
1. 우유와 요거트를 동시에 구입한 장바구니 id만
(=Milk와 Yogurt가 모두 있는 cart_id)
id는 한 품목당 하나씩 부여가 되므로 중복되지 않음.
cart_id는 중복되지 않음
*name은 중복될 수 있음
2. 장바구니 id순 정렬
💟풀이
SELECT cart_id
from cart_products
where name in ('Milk','Yogurt')
#1. name이 milk또는 yogurt인 것
group by cart_id
#2. cart_id별로 묶는다
having count(distinct name)=2
#3. 묶인 id당 가지고 있는 name의 고유한 갯수가 2개 인것
-- (=milk와 yogurt가 각각 한 개 씩 총 두 개가 있는 id)
order by cart_id
#4. cart_id별 정렬
〰️풀이 해설〰️
: 쿼리의 작동 순서에 대한 인지가 필요함.
SQL에서는 기본적으로 쿼리가
FROM - ON - JOIN - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 작동함
그렇다면 순서에 맞게 작성을 해보자.
where name in ('Milk','Yohgurt')group by를 통해 cart_id로 묶고
= 동일한 cart_id로 name행이 합쳐짐.
group by cart_id
우유와 요거트가 '모두' 있는 cart_id만 남기기
: '모두' 있다 == name의 갯수가 2개(우유,요거트) == count(name)=2
단, 하나의 품목을 여러번 구매했을 수 있으므로 distinct를 통해 중복을 제거해야함.
having count (distinct name) = 2