SQL-запрос с суммой связанной таблицы - PullRequest
3 голосов
/ 31 января 2012

Имеются следующие таблицы:

 Clients (ID, LastName)

 Orders (ID, ClientID)

 Payments (ID, OrderID, PaymentDate, Amount)

Мне нужен SQL-запрос, который вернет список клиентов LastNames, которые произвели платежи после указанной даты, на общую сумму, по крайней мере, некоторую сумму.

Пример. Получить всех клиентов, которые сделали платежи после 1 января 2011 года на общую сумму не менее 1 000 долларов США.

Я могу получить клиентов, которые сделали платежи с указанной даты (01.01.2011), например:

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

Я не могу понять, как получить тех клиентов, у которых эти платежи составляют хотя бы определенную сумму.

Ответы [ 3 ]

5 голосов
/ 31 января 2012

Я думаю, вы можете использовать что-то вроде этого:

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 голосов
/ 31 января 2012
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

Если вы хотите узнать точную сумму - раскомментируйте прокомментированную часть в первой строке запроса

1 голос
/ 31 января 2012

Я считаю, что-то вроде этого должно работать:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...