sql/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