SQL查询,用于统计每个客户的订单数和总金额
我有两个 Order
带有列的表:
OrderID,OrderDate,CID,EmployeeID
并OrderItem
带有列:
OrderID,ItemID,Quantity,SalePrice
我需要返回CustomerID(CID),每个客户的订单数以及所有订单的每个客户的总金额。
到目前为止,我有两个单独的查询。一个给了我客户订单的数量。
SELECT CID, Count(Order.OrderID) AS TotalOrdersFROM [Order]
Where CID = CID
GROUP BY CID
Order BY Count(Order.OrderID) DESC;
另一个给了我总销售额。我在合并它们时遇到了麻烦…
SELECT CID, Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmountFROM 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 JOIN
为LEFT OUTER JOIN
。
以上是 SQL查询,用于统计每个客户的订单数和总金额 的全部内容, 来源链接: utcz.com/qa/430409.html