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
'SQL > 프로그래머스 SQL 고득점 kit' 카테고리의 다른 글
SQL 고득점 Kit / 자동차 대여 기록에서 장기/단기 대여 구분하기 / MySQL(DATEDIFF 함수) (0) | 2023.11.14 |
---|---|
SQL 고득점 Kit / 상품을 구매한 회원 비율 구하기 / MySQL (0) | 2023.11.08 |
SQL 고득점 Kit / 그룹별 조건에 맞는 식당 목록 출력하기 - MySQL (1) | 2023.11.03 |
SQL 고득점 Kit / 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 - MySQL (WHERE절 서브쿼리) (0) | 2023.11.02 |
SQL 고득점 Kit / 주문량이 많은 아이스크림들 조회하기 - MySQL (0) | 2023.11.02 |