سلام
وقت بخیر
سایت فروش رستوران هست و میخواهیم برای هر محصول، محصول پیشنهادی مشخص شود.
برای هر محصول لیست محصولاتی که با محصول مورد نظر در یک سفارش بوده اند به تعداد تکرار در سفارش مرتب شوند
این شرایط بدون در نظر گرفتن CustomerId هست
مثال زیر: یعنی هر مشتری که جوجه سفارش میده حتما ماست هم سفارش میده پس من در محصول پیشنهادی جوجه کباب باید ماست رو بزارم
سالاد هم باید بزارم چون از 3 تا مشتری دو تا شون که جوجه سفارش دادن سالاد هم سفارش دادن
زیتون و کوکا هم میتونه در انتهای سبد خرید پیشنهادی باشه چون به هر حال از 3 نفری حداقل یک نفر یکی از این محصولات رو سفارش داده
جوجه کباب ماست سالاد زیتون کوکا
1 1 1 1 0
1 1 0 0 1
1 1 1 0 0

اسکریپتی که من نوشتم ولی جواب نداد به این صورت هست
دوستان اگر کسی میتونه راهنمایی کنه ممنون میشم
WITH order_items_counted AS
(
SELECT
oi.id,
p.ProductId,
p.ProductName,
oi.Units,
COUNT(p.ProductId) OVER (PARTITION BY oi.id) AS product_count -- Counts how many products are in each order
FROM ProductItems p
inner join OrderItems oi on p.OrderItemId=oi.Id
),
potential_matches AS
(
SELECT DISTINCT
O1.Id,
O1.product_count,
COUNT(O1.id) OVER (PARTITION BY O1.Id, O2.Id) AS matched_row_count -- Counts how many order matched
FROM order_items_counted AS O1
INNER JOIN order_items_counted AS O2
ON O1.Id <> O2.Id -- Different Orders
AND O1.product_count = O2.product_count -- With the same Products
AND O1.ProductId = O2.ProductId -- Which are the same Products
--AND O1.Units = O2.Units -- With the same Quantities
)


-- get matches
SELECT DISTINCT
Id
FROM potential_matches AS exact_matches
WHERE product_count = matched_row_count