当前位置: 首页 > 面试题库 >

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

翟高明
2023-03-14
问题内容

我有两个 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查询来计算每天的总订单数吗? 以下是这些列及其在我的数据库中的数据。 例如,2009年2月有2个订单 我需要一个SQL查询,该查询将计算并显示每天的总金额。 因此,对于2009年2月3日,总计为699.98 我需要在图表中显示每天的总订单金额 如果使用PHP会更容易做到,那么也要提一下它。 更新: 我想澄清一下,我需要本月的每日总金额。我在最初的问题中忘记提及这一

  • 我正在尝试使用Altova XMLSpy和XQuery1.0为每个客户返回最近的订单。 在SQL中,查询如下所示: 它返回16行,但我无法获得类似于XQuery中的工作。 我尝试了多种不同的代码,我认为我得到的最接近的代码是: 对于XML从MS Access导出的糟糕的标记名表示歉意。 请救命!提前道谢。 编辑:在尝试JoeMFB的解决方案后,当我只需要最近的(或最大日期)时,我会收到每个客户的所

  • 我有一个名为-'users'的示例sql表,其中包含以下记录: 我想获得每一个用户的计数在每日,每周和每月的基础上与预期的outlike为:

  • 我有以下数据 对于MySQL中的上述表布局,我试图计算出每个用户映射到多少个不同的DeviceCode 期待指导。 谢谢

  • 问题内容: 由于某种原因,我对此感到困惑。 基本上,我正在寻找一个查询,该查询将查找自2010年以来每月的新客户数量。 我有客户的电子邮件地址(email),所有下达的订单(OrderID)以及下达订单的日期(OrderDate)。该表是tblOrder。 我知道“新客户”是:(a)在日期/月份 之前 从未下过订单的人,以及(b)在日期/月份 之后 至少下过一次订单的人 我希望输出最终是这样的,用

  • 问题内容: 我想使用原始sql来计算帐户余额,而无需额外的应用程序逻辑。交易模式包括金额,from_account_id和to_account_id 我的查询是 而且它没有按我预期的那样工作-结果是错误的,但是如果我仅在事务正常运行后才加入交易,例如只需借记金额就可以 我在余额查询中错过了什么? http://sqlfiddle.com/#!15/b5565/1 问题答案: 基本上,您正在计算a和