简体   繁体   English

带有相关表和的SQL查询

[英]SQL Query with Sum of Related Table

Have the following tables: 有下表:

 Clients (ID, LastName)

 Orders (ID, ClientID)

 Payments (ID, OrderID, PaymentDate, Amount)

I need a SQL query that will return the list of client LastNames that have made payments after a given date that total at least some amount. 我需要一个SQL查询,它将返回在给定日期之后已经付款的客户端LastNames列表,该日期总计至少有一些金额。

Example: Retrieve all clients who have made payments after 1/1/2011 that total at least $1,000. 示例:检索2011年1月1日之后至少为1,000美元的所有客户。

I can get the clients who have made payments since a given date (1/1/2011) like this: 我可以得到自指定日期(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'))

I can't figure out how to only get those clients where these payments add up to at least a given amount. 我无法弄清楚如何只获得这些付款加起来至少给定金额的客户。

I think you can use something like this: 我想你可以使用这样的东西:

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
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

If you want to know an exact sum - uncomment the commented part in first line of query 如果您想知道确切的总和 - 在第一行查询中取消注释注释部分

I believe something like this should work: 我相信这样的事情应该有效:

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))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM