【问题标题】:SQL Query to count and calculate amount based on columns in different tablesSQL查询根据不同表中的列进行计数和计算
【发布时间】:2016-01-24 08:59:02
【问题描述】:

我的问题:-

过去向 MIP 下过多个订单的客户列表。编写一个 SELECT 语句,为每个具有这些列的订单的客户返回一行:

  • 客户 FirstName 和 EmailAddress 列
  • 客户下订单的数量统计
  • 该客户下达的所有订单的总金额(来自 OrderItems 表)

我的 ERD:-

我的问题:- 我完全卡住了。不知道。这是一道作业题。 我也尝试过 count ,但只是关于如何去做的建议将不胜感激。我需要通过第三张表计算这些客户花费的总金额 谢谢

【问题讨论】:

标签: sql


【解决方案1】:

对客户和订单表进行内部联接。然后按名字和电子邮件地址分组。计算订单数量和金额总和。 如果您的表名为 Customer 和 Order,则 sql 语句将类似于

SELECT 
    Customer.FirstName
    ,Customer.EmailAddress
    ,COUNT(Order.OrderId) AS OrdersPlaced
    ,SUM(Order.Amount) AS TotalAmount
FROM 
    Customer
    INNER JOIN Order ON Customer.CustomerID = Order.CustomerID
GROUP BY
    Customer.FirstName
    ,Customer.EmailAddress

希望这会有所帮助。

【讨论】:

  • 抱歉,之前没有看到您的 ERD SELECT Customers.FirstName ,Customers.EmailAddress ,COUNT(Orders.OrderId) AS OrdersPlaced ,SUM(Orders.ShipAmount) AS TotalAmount FROM Customers INNER JOIN Orders ON Customers。 CustomerID = Orders.CustomerID GROUP BY Customers.FirstName ,Customers.EmailAddress 如果您还需要包含税额,您可以将 SUM(Orders.ShipAmount) 更改为 SUM(Orders.ShipAmount) + SUM(Orders.TaxAmount)
  • @Adish ..是的,你是对的,问题是我不需要 taxamount 或 ShipAmount ..我需要从 OrderItems 表中计算 TotalAmount,其中 TotalAmount = (ItemPrice -DiscountAmount ) *数量
  • 是的,我们只需要那些下过不止一个订单的客户,所以我试图用 where 子句来做到这一点
  • SELECT Customers.FirstName ,Customers.EmailAddress , COUNT(Orders.OrderId) AS OrdersPlaced From Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID GROUP BY Customers.FirstName ,Customers.EmailAddress HAVING COUNT ( Orders.OrderID) >= 2 所以这确实有效,但我仍然需要计算所有这些订单的总金额。
  • SELECT Customers.FirstName ,Customers.EmailAddress , COUNT(Orders.OrderId) AS OrdersPlaced, SUM( (OrderItems.ItemPrice -OrderItems.DiscountAmount ) * OrderItems.Quantity ) TotalAmount FROM Customers INNER JOIN Orders ON Customers .CustomerID = Orders.CustomerID INNER JOIN OrderItems ON Orders.OrderID = OrderItems.OrderID GROUP BY Customers.FirstName ,Customers.EmailAddress HAVING COUNT (Orders.OrderID) > 1 如果 OrderItems 表中的 DiscountAmount 为空,您可能需要 COALESCE。我假设 ItemPrice 永远不会为空。请注意,我在 where 子句中将 >= 2 更改为 > 1。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2023-03-08
  • 2019-05-29
  • 2021-02-26
  • 2019-04-05
  • 2017-09-08
  • 1970-01-01
  • 2019-08-11
相关资源
最近更新 更多