SQL/프로그래머스 SQL 고득점 kit
프로그래머스 / SQL 코딩테스트 연습 / 우유와 요거트가 담긴 장바구니 / MySQL
박혀노
2023. 11. 20. 19:31
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