#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
предложение.