2014-09-22 71 views
1

请看看下面的SQL查询连接:当SUM()使用不正确的结果,只有一个记录显示

SELECT Client_Portfolio.*, 
Client.Name AS "Client Name", 
Provider.Name AS "Provider Name", 
Initial_Fees.*, 
Portfolio.VAT, 
Portfolio.Invest_Amount, 
Portfolio.Cash_Value, 
SUM(Ongoing_Fees.Fee) 
FROM Client_Portfolio 
LEFT JOIN Client ON Client.idClient = Client_Portfolio.idClient 
LEFT JOIN Portfolio ON Portfolio.idPortfolio = Client_Portfolio.idPortfolio 
LEFT JOIN Provider ON Provider.idProvider = Portfolio.idProvider 
LEFT JOIN Initial_Fees ON Initial_Fees.idPortfolio = Portfolio.idPortfolio 
LEFT JOIN Ongoing_Fees ON Ongoing_Fees.idPortfolio = Portfolio.idPortfolio 
ORDER BY Client_Portfolio.idClient 

这个查询产生不正确的结果,但如果我删除“SUM(Ongoing_Fees.Fee)”部分,那么这会产生正确的结果。

Ongoing_Fees是一张表,有些Portfolios可能有Ongoing_Fees,而另一些则没有。我试图总结所有Ongoing_Fees分别属于每个投资组合,并用上述查询得到结果。但它出错了。它给了我整个表的总和Ongoing_Fees,并且整个上面的查询返回了1行!我怎样才能解决这个问题?

+1

没有分组的聚合函数?最后你可能需要一个group by子句。 – 2014-09-22 09:02:58

+0

@AhhikChakraborty:谢谢你的回复。我怎样才能申请它? – 2014-09-22 09:03:31

+0

在订单前添加以下内容:由Client.idClient进行分组,并使其成为选择的一部分。 – 2014-09-22 09:04:55

回答

1

您正在使用聚合函数sum()而没有group by所以它会给你一个单行。 如果你想得到每组的总和的结果,那么你必须在最后使用group by子句。

从您可能需要order by子句之前添加

group by Portfolio.idPortfolio讨论。

这会给你从选择的每个idPortfolio总和价值。

更多关于它的信息http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html