Mo!
(프로그래머스) SQL Level 4 [우유와 요거트가 담긴 장바구니] Oracle 풀이 본문
SQL

(프로그래머스) SQL Level 4 [우유와 요거트가 담긴 장바구니] Oracle 풀이

5사 2021. 11. 30.

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/62284

 

코딩테스트 연습 - 우유와 요거트가 담긴 장바구니

CART_PRODUCTS 테이블은 장바구니에 담긴 상품 정보를 담은 테이블입니다. CART_PRODUCTS 테이블의 구조는 다음과 같으며, ID, CART_ID, NAME, PRICE는 각각 테이블의 아이디, 장바구니의 아이디, 상품 종류, 가

programmers.co.kr

GROUP BY와 HAVING 절을 이용한 풀이

 

 

where name in ('Milk', 'Yogurt')

-- 구입한 상품 종류에 Milk 또는 Yogurt가 포함되어야 하는 조건을 준다

 

group by cart_id

-- cart_id 별로 그룹화한다

-- 하지만 여기까지 했을 때 Milk만 2번 구매하거나, Yogurt만 2번 구매하거나 하는 류의 원하지 않은 데이터들도 들어가 있기 때문에 조건을 주어 데이터를 정제해야 한다

 

having count(distinct name) = 2

-- cart_id 별로 그룹화한 데이터에서 상품 종류에 distinct를 주어 중복을 제거한다.

-- 이를 count 하여 2건만 나오도록 한다 (Milk와 Yogurt만 나오도록)

 

 

INTERSECT(교집합)을 이용한 풀이

 

 

select distinct cart_id
from cart_products
where name = 'Milk'

-- 'Milk'를 구매한 cart_id를 뽑는데, cart_id가 중복되지 않도록 뽑는다

 

select distinct cart_id
from cart_products
where name = 'Yogurt'

-- 'Yogurt'를 구매한 cart_id를 뽑는데, cart_id가 중복되지 않도록 뽑는다

 

-- INTERSECT를 통해 위의 두 결과의 교집합을 구한다

-- 결국 'Milk'와 'Yogurt'를 동시에 구매한 cart_id가 출력 결과로 나온다

 

Comments