Две функции SUM одного поля в запросе

Нужно вывести имя владельца, сумму (условие: без даты оплаты), сумму (условие: с датой оплаты) Пытался сделать так:

SELECT o.name, SUM(f.amount), (SELECT SUM(f.amount) FROM fines f WHERE f.datepay IS NOT NULL )
FROM fines f INNER JOIN autos a ON f.auto = a.plateno INNER JOIN owners o ON a.owner = o.id
GROUP BY o.name;

введите сюда описание изображения

Как сделать так чтоб для каждого владельца выводился столбец суммы без даты оплаты и столбец суммы с датой оплаты (дату не нужно выводить)?


Ответы (2 шт):

Автор решения: jlorpa

Вы сейчас во вложенном запросе вычисляете сумму с датой оплаты для всех владельцев. Самое простое решение добавить во вложенный запрос в условие WHERE ещё один предикат, которым вы будете фильтровать по владельцу.

→ Ссылка
Автор решения: Mike
SELECT o.name, SUM(f.amount), SUM(case when f.datepay IS NOT NULL then f.amount end)
  FROM fines f INNER JOIN autos a ON f.auto = a.plateno INNER JOIN owners o ON a.owner = o.id
 GROUP BY o.name;

Ну и видимо еще sum внутри которого противоположное условие у case потому как вы сказали еще что то про "сумму без даты оплаты"

→ Ссылка