Я использую доктрину в качестве слоя ORM, но, поместив простой запрос mysql в инструмент базы данных, я получил те же результаты. Итак, моя проблема:
У меня есть таблица счетов-фактур, таблицы invoice_items и invoice_payments, и в результате я хотел бы получить все счета, которые еще не оплачены или, по крайней мере, еще не полностью оплачены. Я знаю, что запрос должен быть почти корректным, потому что он возвращает правильное количество элементов ... единственное, что он умножает количество на количество вероятно соединенных строк.
Итак, запрос, который у меня есть сейчас:
select invoice.*, sum(item.amount * item.quantity) as totalDue,
sum(payment.amount) as totalPaid
from invoices as invoice
left join invoice_items as item on item.invoice_id = invoice.id
left join invoice_payments as payment on payment.invoice_id = invoice.id
and payment.status = 'successful'
where invoice.invoice_number is not null
and invoice.sent_at is not null
and invoice.due_date >= '2018-05-15'
group by invoice.id
having count(payment.id) = 0
or sum(payment.amount) < sum(item.amount * item.quantity)
order by invoice.issue_date desc, sum(payment.amount) desc;
Как вы видите, у меня также есть totalDue и totalPaid в моем выборе (они только для справки и должны быть удалены, если запрос правильный).
Что я увидел, так это то, что сумма умножается на шесть (потому что в таблице платежей есть 6 пунктов).
Так что, возможно, кто-то может помочь мне указать в правильном направлении, что он не выполняет умножение на totalDue. Я думал, что это, вероятно, потому что группа, но без моего запроса терпит неудачу.