所以我在这里有这个查询,我无法弄清楚如何改变行为。基本上它应该从应用程序表中返回一组结果,其中来自付款表的总付款具有相应的ID,并且来自费用表的总费用具有相应的ID。当一次付费一次付款时,它的工作非常完美。但是,如果有2笔费用,付款似乎会翻倍。我假设如果有3个费用,它会增加三倍等等。
我尝试将总和(不同的payment.amount)作为付款,但问题是,完全可能存在两笔完全相同金额的付款。我不确定是否有可能喜欢,做一个总和,其中有一个与金额相对应的独特ID。我还在学习SQL。
select applications.*,
permits.title as permit,
sum(payments.amount) as payments,
sum(fees.unitprice) as fees
from applications
left join permits on applications.permitid=permits.id
left join payments on payments.appid=applications.id
left join fees on fees.appid=applications.id
where applications.deleted=0
and payments.deleted=0
and fees.deleted=0
and fees.unitPrice > 0
and applicationdate between '1975-1-1' and '2011-2-10'
group by applications.id
order by permits.deptid,permits.title,status,dateissued,applicationdate
任何帮助将不胜感激 - 我一直试图解决这个问题几个小时!我只想弄清楚是什么造成了它。
答案 0 :(得分:1)
您可以在派生表中进行聚合并加入到该表中。
... join (SELECT fees.appid, sum(fees.unitprice) as fees
FROM fees
WHERE fees.deleted = 0
and fees.unitPrice > 0
GROUP BY fees.appid) aggregatedfees
on aggregatedfees.appid = applications.id
...
顺便说一下:你的所有左连接都是由where子句转换为内部连接。