2012-05-03 21 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'!问题解决了! –