MYSQL Выберите фильм и среднее количество голосов в одном запросе - PullRequest
0 голосов
/ 30 марта 2019

У меня есть две таблицы mysql

голосов:

user
movieid
starCount

фильмов:

id
title
description

Я хочу получить id,title,description,avg(starCount) для каждого фильма в таблице.

Я пытался:

select id,title,description,avg(starCount) 
from movies 
join votes on movies.id=votes.movieid

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Ваш запрос выглядит довольно хорошо, вы просто пропускаете предложение GROUP BY:

select m.id, m.title, m.description, avg(v.starCount) 
from movies m
join votes v on movies.id = votes.movieid
group by m.id, m.title, m.description

Каждый неагрегированный столбец должен быть объявлен в предложении GROUP BY: это относится ко всем столбцам, выбранным из movies. С другой стороны, votes.starCount агрегируется функцией AVG, следовательно, он не обязательно должен быть частью предложения GROUP BY.

0 голосов
/ 30 марта 2019

Вы можете использовать следующее решение, используя LEFT JOIN и GROUP BY:

SELECT id, ANY_VALUE(title) AS title, ANY_VALUE(description) AS description, AVG(starCount) 
FROM movies LEFT JOIN votes ON movies.id = votes.movieid
GROUP BY movies.id

В вашем запросе отсутствует GROUP BY.Чтобы получить средний голос по каждому фильму, вам нужно сгруппировать по фильмам и получить среднее значение с помощью функции AVG.Используя LEFT JOIN, вы также получаете фильмы без голосования.

демо на dbfiddle.uk

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