2014-09-22 70 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