[프로그래머스] 우유와 요거트가 담긴 장바구니

yenpkr·2025년 3월 2일
0

sql

목록 보기
40/91

문제

제출

SELECT cart_id
from cart_products
where name in ('milk','yogurt')
group by 1
having count(distinct name) > 1

먼저 milk, yogurt 행들만 필터링하고, 장바구니 id로 group by 한 후 count(distinct name) > 1 을 통해 중복 없을 때 2개 이상의 name을 가진(milk, yogurt) 장바구니 id를 선택한다.

또 다른 답

SELECT CART_ID
  FROM CART_PRODUCTS
 WHERE CART_ID in
   (SELECT CART_ID
      FROM CART_PRODUCTS cp1
     WHERE NAME = 'Yogurt')
   AND NAME = 'Milk' 
 ORDER
    BY CART_ID
;
  • where 절에서 NAME = 'Yogurt' AND NAME = 'Milk' 안 되는 이유
    하나의 NAME에는 ‘Yogurt’나 ‘Milk’ 중 하나만 있을 수 있기 때문
    하지만 서브쿼리를 사용하면 서브쿼리와 외부 쿼리의 조합으로 각각의 NAME에 대한 필터링을 두 번에 걸쳐 할 수 있다.

0개의 댓글