左连接,其中一个表中有2个结果,将相应表的结果加倍

时间:2011-02-11 15:12:06

标签: mysql join sum

所以我在这里有这个查询,我无法弄清楚如何改变行为。基本上它应该从应用程序表中返回一组结果,其中来自付款表的总付款具有相应的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

任何帮助将不胜感激 - 我一直试图解决这个问题几个小时!我只想弄清楚是什么造成了它。

1 个答案:

答案 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子句转换为内部连接。