Почему запрос join, содержащий функцию sum, возвращает только 1 строку

#mysql #sql

#mysql #sql

Вопрос:

У меня есть 2 таблицы. Проблема и problem_votes. В таблице проблем много строк, а в таблице голосов только одна.

У меня есть этот запрос:

 select
   problems.problem_id,
   creator_member_id,
   problem_title,
   problem_description,
   sum( vote ) as totalVotes,
   problem_date
from problems 
left join problem_votes on
problems.problem_id = problem_votes.problem_id
  

Я ожидал, что будет возвращен список проблем, но по какой-то причине я получаю только один элемент.

Если я удаляю функцию sum, она возвращает двадцать строк. Есть ли способ заставить запрос получить сумму голосов для каждой проблемы?

Ответ №1:

Вам нужен GROUP BY иначе он будет агрегировать всю таблицу вместо возврата одной строки для каждого problem_id:

 SELECT
    problems.problem_id,
    creator_member_id,
    problem_title,
    problem_description,
    sum(vote) as totalVotes,
    problem_date
FROM problems
LEFT JOIN problem_votes
    ON problems.problem_id = problem_votes.problem_id
GROUP BY problems.problem_id
  

В этом запросе используется расширение MySQL: GROUP BY и HAVING со скрытыми столбцами

Ответ №2:

SUM является агрегатной функцией, вам нужно GROUP BY предложение.