본문 바로가기

SQL/프로그래머스 SQL 고득점 kit

프로그래머스 / SQL 코딩테스트 연습 / 우유와 요거트가 담긴 장바구니 / MySQL

728x90

📚문제

출처 : 프로그래머스

 

📝풀이

SELECT CART_ID
FROM CART_PRODUCTS 
WHERE NAME IN ('Yogurt','Milk')
GROUP BY CART_ID 
HAVING COUNT(NAME) >= 2
   AND (SUM(PRICE) <> COUNT(NAME) * 2980) AND (SUM(PRICE) <> COUNT(NAME) * 1880)
ORDER BY CART_ID

 

문제를 처음 볼 땐 그렇게 어려워 보이진 않는데 

막상 풀어보면 조금 까다롭다

한 CART_ID에 'Yogurt' 와 'Milk'를 모두 포함하는지를 봐야하는데

같은 행에 들어가 있지도 않고

그렇다고 CART_ID로 그룹화하면 NAME에 어떤 것들이 포함되어 있는지 알 수 없다

 

이런 저런 방법을 고민해보고 시도해보다가

 테이블의 PRICE 항목을 활용해 보기로 했다

 

우선 CART_ID로 그룹화 한 다음,

SUM 집계함수로 상품 가격의 합계와 

CART_ID에 담겨있는 상품의 수 ( = COUNT(NAME) )와 Yogurt ( OR Milk ) 의 가격을 곱해준 값이 같다면 

담겨 있는 상품이 모두 동일하다는 뜻이다

( Yogurt만 담겨있거나 Milk만 담겨있거나 ) 

이런 경우를 제외하고 조회해준다면 정답

728x90