簡體   English   中英

SQL 統計訂購相同產品至少 7 次的客戶

[英]SQL counting customers that have ordered the same product at least 7 times

我有以下表格

– 價格( prodID ,來自,價格)

– 產品( prodID 、名稱、數量)

– PO ( prodID , orderID , 金額)

– 訂單( orderID 、日期、地址、狀態、trackingNumber、custID、shipID)

– 運輸( shipID 、公司、時間、價格)

– 客戶( custID ,名稱)

– 地址( addrID 、custID、地址)

我想找到至少購買了 7 次相同商品的客戶的姓名,如果他們在一個訂單中購買了兩次相同的商品,我想將其計為一次。 這是我的代碼:

SELECT C.name, COUNT(DISTINCT p.prodId) as prod_count
FROM Product P
INNER JOIN PO
ON PO.prodId = P.prodId
INNER JOIN "Order" O
ON O.orderId = PO.orderId
INNER JOIN Customer C
ON C.custId = O.custId
GROUP BY c.name
HAVING COUNT(DISTINCT p.prodId) > 6;

但是,這是返回每個客戶訂購的獨特產品的數量,這不是我想要的。

我們可以在這里嘗試使用兩個級別的聚合。 第一級聚合是按客戶、訂單和產品,如果給定客戶在一個訂單中多次訂購相同產品,則會刪除重復項。 下一個聚合級別僅按客戶和產品進行,它僅保留至少擁有一種產品且在不同訂單中購買了 7 次或更多次的客戶。 最后,我們做了一個獨特的 select 來保留每個唯一匹配的客戶名稱。

WITH cte1 AS (
    SELECT c.name, o.orderId, p.prodId
    FROM Customer c
    INNER JOIN "Order" o ON o.custId = c.custId
    INNER JOIN PO po ON po.orderId = o.orderId
    INNER JOIN Product p ON p.prodId = po.prodId
    GROUP BY c.name, o.orderId, p.prodId
),
cte2 AS (
    SELECT name, prodId
    FROM cte1
    GROUP BY name, prodId
    HAVING COUNT(*) >= 7
)

SELECT DISTINCT name
FROM cte2;

據我所知,除非您在結果中需要Product名稱,否則無需加入Product表。

;with CTE as(
    SELECT orderId,prodId, COUNT(*) as OrderProd_Count
    FROM dbo.PO
    GROUP BY orderId,prodId
    )
    ,CTE1 as(
    SELECT prodId,count(*) as Prod_Count
    from CTE
    group by prodId
    having count(*)>7
    )
    select c1.productid,ca.Name from CTE1 C1
    inner join CTE C on c1.prodId=c1.prodId
    inner join dbo.Order O on c.orderid=O.orderId
    inner join Customer  C on o.custid=C.custid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM