【问题标题】:SQL Query with Sum of Related Table相关表总和的 SQL 查询
【发布时间】:2012-01-31 16:07:14
【问题描述】:

有以下表格:

 Clients (ID, LastName)

 Orders (ID, ClientID)

 Payments (ID, OrderID, PaymentDate, Amount)

我需要一个 SQL 查询,该查询将返回在给定日期之后付款的客户姓氏列表,总金额至少为一定金额。

示例:检索所有在 2011 年 1 月 1 日之后付款且总额至少为 1,​​000 美元的客户。

我可以像这样获取自给定日期(2011 年 1 月 1 日)以来付款的客户:

 SELECT Clients.LastName
 FROM   Clients
 WHERE  Clients.ID IN (SELECT Orders.ClientID
                       FROM   Orders
                       WHERE  Orders.ID IN (SELECT Payments.OrderID
                                            FROM   Payments
                                            WHERE  Payments.PaymentDate >= '2011-01-01'))

我不知道如何只吸引那些付款总计至少达到给定金额的客户。

【问题讨论】:

    标签: sql sum


    【解决方案1】:

    我认为你可以使用这样的东西:

    select c.ID, c.LastName
    from Clients c
    join Orders o on o.ClientId=c.Id
    join Payments p on p.OrderId=o.Id
    where p.PaymentDate >= '2011-01-01'
    group by c.ID, c.LastName
    having sum(p.PaymentAmount) > 1000
    

    【讨论】:

      【解决方案2】:
      SELECT Clients.ID, Clients.LastName--, SUM(Amount) AS TotalPayments
      FROM Clients
      JOIN Orders ON Clients.ID = Orders.ClientId
      JOIN Payments ON Payments.OrderId = Orders.Id
      WHERE Payments.PaymentDate > '20110101'
      GROUP BY Clients.ID, Clients.LastName
      HAVING SUM(Amount) >= 1000
      

      如果您想知道确切的总和 - 取消注释第一行查询中的注释部分

      【讨论】:

      • 这和我收到的第一个答案一样。伟大的思想都一样!
      【解决方案3】:

      我相信这样的事情应该可行:

      Clients.LastName
      FROM   Clients
      WHERE  Clients.ID IN (SELECT Orders.ClientID
                         FROM   Orders
                         WHERE  Orders.ID IN (SELECT Payments.OrderID
                                              FROM   Payments
                                              WHERE  Payments.PaymentDate >= '2011-01-01' 
                                              GROUP BY Payments.OrderId 
                                              HAVING SUM(Payments.Amount) > 1000))
      

      【讨论】:

      • 我同意 Blorgbeard/Oleg:子查询不应该是必需的。
      • 这将显示有一个或多个订单且付款至少为 1000 的客户(但这些付款是针对相同订单的)。它不会显示为 3 个不同的订单支付 3 次 500 的客户。
      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多