回答

收藏

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

技术问答 技术问答 202 人阅读 | 0 人回复 | 2023-09-14

我有两个 Order带列表:& J; n2 E% d0 v6 N
OrderID,OrderDate,CID,EmployeeID并OrderItem带有列:
; Z( Y( m( ~0 P" a; Y1 M. Y" iOrderID,ItemID,Quantity,SalePrice我需要返回CustomerID(CID),每个客户的订单数量和每个客户的总金额。* J, p8 ^. j. c1 S
到目前为止,我有两个单独的查询。一个给了我客户订单的数量。
: ?8 f  K! _* s% JSELECT CID,Count(Order.OrderID) AS TotalOrdersFROM [Order]Where CID = CID GROUP BY CIDOrder BY Count(Order.OrderID) DESC;另一个给了我总销售额。合并时遇到了麻烦…5 I7 x; b4 P' X( {
SELECT CID,Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmountFROM OrderItem,[Order]WHERE OrderItem.OrderID = [Order].OrderIDGROUP BY CID我正在Access 2010年中期执行此操作。3 ?. \# |; \( |9 h" j* d5 j
                                                                / t: f+ ?5 h* ?8 ]/ |
    解决方案:                                                               
3 w" o+ ~( W4 L5 A' x3 l" Z% z( Y0 H                                                                您将COUNT(DISTINCT ...)在其他SQL用于发动机:" _, _, e& E* D9 {
SELECT CID,       Count(DISTINCT O.OrderID) AS TotalOrders,       Sum(OI.Quantity*OI.SalePrice) AS TotalDollarAmount FROM [Order] OINNER JOIN [OrderItem] OI  ON O.OrderID = OI.OrderIDGROUP BY CID Order BY Count(DISTINCT O.OrderID) DESC不幸的是,哪一个Access不支持。相反,您可以先获得订单金额,然后在确定订单数量之前添加:
, s7 z" y2 J# P, k# SSELECT CID,      COUNT(Orders.OrderID) AS TotalOrders,      SUM(OrderAmounts.DollarAmount) AS TotalDollarAmountFROM [Orders]INNER JOIN (SELECT OrderID,Sum(Quantity*SalePrice) AS DollarAmount       FROM OrderItems GROUP BY OrderID) AS OrderAmounts  ON Orders.OrderID = OrderAmounts.OrderIDGROUP BY CIDORDER BY Count(Orders.OrderID) DESC如果您需要包括订单中没有商品的客户(异常但可能),请更改INNER JOIN为LEFT OUTER JOIN。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则