mysql 문제풀이/easy

프로그래머스 Lv 4 - 우유와 요거트가 담긴 장바구니 - Summer/Winter Coding(2019)

gooreumsea 2023. 7. 9. 12:29

습득한점:

코딩테스트 출제 문제 인 것 같은데, 어렵지는 않았으나 접근할 수 있는 방법이 생각보다 많아보였다.

조인으로도, WITH로도 풀 수 있을 것 같다.

 

 

문제:

데이터 분석 팀에서는 우유(Milk)와 요거트(Yogurt)를 동시에 구입한 장바구니가 있는지에 대한 이력 파악

우유와 요거트를 동시에 구입한 장바구니의 아이디를 조회하는 쿼리 작성

정렬은 아이디로

 

 

 

문제파악:

NAME 컬럼에
'Milk', 'Yogurt'가 모두 들어가는 값만 걸러낸다.

여기서 걸러낸 결과 NAME 카운트 값이 Milk =1 , Yogurt=1 이라고 당연하게 생각했던게 실수 였다.

2개인것도 3개 이상인 것도 고려를 해야했다.

 

아무튼 WHERE NAME IN ~으로는 2개 이상인 값들만 찾을 수 있으니, 이를 처리할 방법을 찾아야 했는데,
COUNT(DISTINCT NAME) = 2를 조건으로 걸면,

반드시 Milk 1개, Yogurt 1개의 구성으로 이루어진 CART_ID만 찾을 수 있고,

이 과정에서 예를들어 Yogurt만 있는 CART_ID,  Milk만 있는 CART_ID를 걸러낼 수 있다.

 

 

풀이:

SELECT CART_ID
FROM CART_PRODUCTS
WHERE NAME IN ('Milk', 'Yogurt')
GROUP BY CART_ID
HAVING COUNT(DISTINCT NAME)=2
ORDER BY CART_ID