我在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
谢谢, 亚历
答案 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