[英]SQL. Find the customers who bought same brands and at-least 2 products in each brand
我有兩張桌子:
Sales
columns: (Sales_id, Date, Customer_id, Product_id, Purchase_amount):
Product
columns: (Product_id, Product_Name, Brand_id,Brand_name)
我必須編寫一個查詢來查找購買了品牌“X”和“Y”(兩者)以及每個品牌至少 2 件產品的客戶。 以下查詢是否正確? 有什么推薦的改變嗎?
SELECT S.Customer_id "Customer ID"
FROM Sales S LEFT JOIN Product P
ON S.Product_id = P.Product_id
AND P.Brand_Name IN ('X','Y')
GROUP BY S.Customer_id
HAVING COUNT(DISTINCT S.Product_id)>=2 -----at least 2 products in each brand
AND COUNT(S.Customer_id) =2 ---------------customers who bought both brands
任何幫助將不勝感激。 提前致謝
從現有查詢開始,您可以使用以下HAVING
子句:
HAVING
AND COUNT(DISTINCT CASE WHEN p.brand_name = 'X' then S.product_id end) >= 2
AND COUNT(DISTINCT CASE WHEN p.brand_name = 'Y' then S.product_id end) >= 2
這可確保客戶在兩個品牌中都購買了至少兩種產品。 這隱含地保證它在兩個品牌中都下訂單,因此不需要額外的邏輯。
你也可以用MIN()
和MAX()
來表達:
HAVING
AND MIN(CASE WHEN p.brand_name = 'X' THEN S.product_id END)
<> MAX(CASE WHEN p.brand_name = 'X' then S.product_id end)
AND MIN(CASE WHEN p.brand_name = 'Y' THEN S.product_id END)
<> MAX(CASE WHEN p.brand_name = 'Y' then S.product_id end)
您可以使用兩個級別的聚合:
SELECT Customer_id
FROM (SELECT S.Customer_id, S.Brand_Name, COUNT(DISTINCT S.Product_Id) as num_products
FROM Sales S LEFT JOIN
Product P
ON S.Product_id = P.Product_id
WHERE P.Brand_Name IN ('X', 'Y')
GROUP BY S.Customer_id, S.Product_Id
) s
GROUP BY Customer_Id
HAVING COUNT(*) = 2 AND MIN(num_products) >= 2;
使用COUNT()
window function 計算每個客戶購買的不同品牌的數量和每個品牌的不同產品的數量。
然后使用HAVING
子句過濾掉沒有購買過這兩個品牌的客戶和GROUP BY
客戶,該子句過濾掉每個品牌至少沒有購買 2 件產品的客戶。
此外,您的聯接應該是INNER
聯接而不是LEFT
。
select t.customer_id "Customer ID"
from (
select s.customer_id,
count(distinct p.brand_id) over (partition by s.customer_id) brands_counter,
count(distinct p.product_id) over (partition by s.customer_id, p.brand_id) products_counter
from sales s inner join product p
on p.product_id = s.product_id
where p.brand_name in ('X', 'Y')
) t
where t.brands_counter = 2
group by t.customer_id
having min(t.products_counter) >= 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.