SQL查询,用于统计每个客户的订单数和总金额

我有两个 Order带有列的表:

OrderID,OrderDate,CID,EmployeeID

OrderItem带有列:

OrderID,ItemID,Quantity,SalePrice

我需要返回CustomerID(CID),每个客户的订单数以及所有订单的每个客户的总金额。

到目前为止,我有两个单独的查询。一个给了我客户订单的数量。

SELECT CID, Count(Order.OrderID) AS TotalOrders

FROM [Order]

Where CID = CID

GROUP BY CID

Order BY Count(Order.OrderID) DESC;

另一个给了我总销售额。我在合并它们时遇到了麻烦…

SELECT CID, Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmount

FROM OrderItem, [Order]

WHERE OrderItem.OrderID = [Order].OrderID

GROUP BY CID

我正在Access 2010中执行此操作。

回答:

您将COUNT(DISTINCT ...)在其他SQL引擎中使用:

SELECT CID, 

Count(DISTINCT O.OrderID) AS TotalOrders,

Sum(OI.Quantity*OI.SalePrice) AS TotalDollarAmount

FROM [Order] O

INNER JOIN [OrderItem] OI

ON O.OrderID = OI.OrderID

GROUP BY CID

Order BY Count(DISTINCT O.OrderID) DESC

不幸的是,哪个Access不支持。相反,您可以先获取订单金额,然后在确定订单数量之前将它们加入:

SELECT CID,

COUNT(Orders.OrderID) AS TotalOrders,

SUM(OrderAmounts.DollarAmount) AS TotalDollarAmount

FROM [Orders]

INNER JOIN (SELECT OrderID, Sum(Quantity*SalePrice) AS DollarAmount

FROM OrderItems GROUP BY OrderID) AS OrderAmounts

ON Orders.OrderID = OrderAmounts.OrderID

GROUP BY CID

ORDER BY Count(Orders.OrderID) DESC

如果您需要包括订单中没有商品的客户(非正常但可能),请更改INNER JOINLEFT OUTER JOIN

以上是 SQL查询,用于统计每个客户的订单数和总金额 的全部内容, 来源链接: utcz.com/qa/430409.html

回到顶部