查询返回一行,包含完整的总和而不是每行的总和

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

标签: mysql sql

我在problem_categories表中有9个项目,其中category_id = 1

当我执行此查询时:

select problems.problem_id , problem_title , sum( vote ) as totalVotes 
from problems 
left join problem_votes on problems.problem_id = problem_votes.problem_id 
left join problem_categories on problems.problem_id = problem_categories.problem_id  
where problem_categories.category_id = 1; 

我得到1行,其中9个项目的所有选票都是完整的。但我真正想要的是9行,每行有一票。通过查看它,我知道我的查询有什么问题吗?

我的桌子是

problem - lists problem information
problem_votes - has a record per vote for each problem
problem_categories - table keeping a problem_id and a category_id so that a problem can be in a certain category

谢谢, 亚历

2 个答案:

答案 0 :(得分:13)

您需要告诉MySQL您要分组的内容。现在它认为你想把一切分成一行。如果您希望按problem_title分组,请在WHERE之后添加此行:

GROUP BY problem_title

这会导致您为每个唯一problem_title获取不同的行,而sum只会计算与该标题匹配的记录。

修改

所以整个查询看起来像这样:

select problems.problem_id , problem_title , sum( vote ) as totalVotes 
from problems 
left join problem_votes on problems.problem_id = problem_votes.problem_id 
left join problem_categories on problems.problem_id = problem_categories.problem_id  
where problem_categories.category_id = 1
group by problem_title; 

答案 1 :(得分:0)

仅仅是一个FYI,大多数SQL版本不接受不包含所有非聚合列的group by语句。因此,如果您正在使用其他SQL软件,则可能需要包含problems.problem_id和problem_title。

有关此问题的更多信息,请参阅此主题:Do all columns in a SELECT list have to appear in a GROUP BY clause