2012-05-03 20 views
0

當我運行此查詢時,投票sum是它應該是(總和= 6而不是3)的2倍。有人可以找出解決這個問題嗎?SQL查詢總和乘以2倍應該是

SELECT sum(votes.vote) AS sum 
    , my_votes.vote IS NOT NULL AS did_i_vote 
    , votes.parent_id, subject 
    , review_date 
    , item_id 
    , review_summary 
    , review, full_name 
    , reputation 
    , profile_picture 
    , accounts.acct_id 
FROM votes 
RIGHT JOIN items_purchased 
    on votes.parent_id=items_purchased.purchase_id 
JOIN accounts 
    ON items_purchased.purchaser_account_id=accounts.acct_id 
JOIN items 
    on items_purchased.item_id=items.folder_id 
LEFT JOIN votes AS my_votes 
    ON my_votes.parent_id=items_purchased.purchase_id 
    AND my_votes.acct_id='3' 
    AND my_votes.column_name='purchase_id' 
WHERE purchase_id='2' 
    AND deleted_p!=1 and pub_priv_p!=1          
GROUP BY items_purchased.purchase_id 

我敢肯定它做的JOIN的,因爲如果我擺脫JOIN items on items_purchased.item_id=items.folder_id然後總和= 3。但是,我需要在那裏加入。

想法?

+2

請張貼一些示例輸入/輸出。 –

+0

你可以用'count()'代替'sum()'嗎? –

+0

count()和sum()都給sum = 6 –

回答

6

沒有模式的,我們不能說,但是這是一個猜測:

檢查所有的連接條件 - 你可能缺少的條件導致該結果集被「複製」。

舉例來說,如果我有一個表

`Foo` with columns `A` `B` and `C` - A and B are the PK; 
`Bar` with columns `A` `B` and `Z` - A and B are the PK; 
`Biz` with columns `Z` `GOAL` 

,我想每A計算目標的數量,如果我加入了富只是用A吧,而不是B還有,我想可能得到一個錯誤的數字。

最簡單的方法看到這是做一個SELECT *並刪除組

+0

感謝spinning_plate提示!是的,讓我看看有6條記錄被返回。嗯,現在如何將他們分組以便計數有效?... –

+0

謝謝!你的建議顯示所有記錄和@艾米特的建議,以檢查'items.folder_id'是唯一的解決了我的問題,有2'項目'具有相同的'folder_id'!問題解決了! –