<aside> <img src="notion://custom_emoji/095aa0e3-0427-4549-97f4-836f488aaa7a/2082b116-8d4c-809a-8600-007ac7ce2330" alt="notion://custom_emoji/095aa0e3-0427-4549-97f4-836f488aaa7a/2082b116-8d4c-809a-8600-007ac7ce2330" width="40px" />
우유와 요거트가 담긴 장바구니
<aside> 🔎
테이블 정보


</aside>
<aside> ❓
두 제품을 동시에 구매한 결과를 어떻게 찾을 것인가?
WHERE 절의 IN 조건 활용하기CART_ID 별로 그룹화 하기 → GROUP BY 활용하기COUNT(DISTINCT NAME) ≥2우유와 요거트를 모두 구매했다는 조건을 만드는 것이 어려웠다.
처음 시도에는 COUNT(*)를 사용하면 될 것이라고 생각했다. 각 제품마다 각각 다른 ID로 기록이 되어 있었기 때문이다. 하지만 WHERE 절로 우유와 요거트를 구입한 데이터를 살펴보니 COUNT(*) ≥ 2를 쓰면 완벽하게 쿼리문을 작성할 수 없었다. 그 이유는 동일한 CART_ID에 요거트만 두 개 구입한 경우가 존재했기 때문이다.

CART_ID 789 의 경우, COUNT(*)를 하면 2가 나오지만 요거트만 구매했다.
COUNT 함수를 써야 한다는 것은 맞는 것 같아서, 안에 다른 컬럼을 넣는 방법을 도출해야겠다고 생각했다. 안에 넣는 컬럼을 NAME으로 바꾸었고, DISTINCT 를 붙여 요거트만 두 개 구입한 경우는 포함이 되지 않도록 했다. 그리고 COUNT ≥ 2 조건을 붙이면 요거트와 우유를 모두 구입한 사용자를 도출할 수 있다는 것을 깨달았다.
</aside>
select cart_id
from cart_products
where name in ('Milk','Yogurt')
group by cart_id
having count(distinct name) >= 2
order by cart_id