Запрос возвращает одну строку с полной суммой вместо суммы за строку - PullRequest
5 голосов
/ 06 декабря 2011

У меня есть 9 элементов в таблицах problem_categories, у которых 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 ]

13 голосов
/ 06 декабря 2011

Вы должны указать MySQL, по чему вы группируете. Прямо сейчас он думает, что вы хотите, чтобы ВСЕ сгруппировалось в один ряд. Если вы хотите, чтобы это сгруппировалось по problem_title, то добавьте в эту строку после вашего WHERE:

GROUP BY problem_title

Это приведет к тому, что вы получите отдельную строку для каждого уникального problem_title, а sum будет считать только записи, соответствующие этому заголовку.

Edit:

Таким образом, весь запрос будет выглядеть примерно так:

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; 
0 голосов
/ 10 мая 2017

Просто к сведению, большинство версий SQL не принимают операторы group by, которые не включают все неагрегированные столбцы. Поэтому, если вы когда-либо работали с каким-либо другим программным обеспечением SQL, вам, скорее всего, нужно будет включить problem.problem_id и problem_title.

Подробнее об этой проблеме читайте в этой теме: Должны ли все столбцы в списке SELECT появляться в предложении GROUP BY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...