Contents
내가 작성한 쿼리
아마존은 이것을 구매한 고객들도 공동 구매 패턴을 기반으로 구매한 기능을 구현하고자 합니다.
해결책을 작성하세요:
1. 동일한 고객이 자주 함께 구매하는 제품 쌍을 식별합니다(여기서 product1_id < product2_id)
2. 각 제품 쌍에 대해 두 제품을 모두 구매한 고객 수를 결정합니다
* 두 제품을 모두 구매한 고객이 최소 3명 이상인 경우 제품 쌍을 추천 대상으로 고려합니다.
customer_count에 의해 내림차순으로 정렬된 결과 테이블을 반환하고,
동점일 경우에는 product1_id에 의해 오름차순으로, product2_id에 의해 오름차순으로 반환합니다.
내가 작성한 쿼리
MySQL, Oracle
SELECT
pp1.product_id AS product1_id,
pp2.product_id AS product2_id,
pi1.category AS product1_category,
pi2.category AS product2_category,
COUNT(DISTINCT pp1.user_id) AS customer_count
FROM ProductPurchases pp1
JOIN ProductPurchases pp2
ON pp1.user_id = pp2.user_id
AND pp1.product_id < pp2.product_id -- 중복 방지
JOIN ProductInfo pi1
ON pp1.product_id = pi1.product_id
JOIN ProductInfo pi2
ON pp2.product_id = pi2.product_id
GROUP BY
pp1.product_id,
pp2.product_id,
pi1.category,
pi2.category
HAVING
COUNT(DISTINCT pp1.user_id) >= 3 -- 3명이상 구매한 경우
ORDER BY
customer_count DESC,
product1_id ASC,
product2_id ASC;
Share article