MYSQL在单个查询中选择电影和平均投票

时间:2019-03-30 15:23:03

标签: mysql sql

我有两个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 :(得分:0)

您可以使用以下解决方案,分别使用LEFT JOINGROUP 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,您还将获得未经表决的电影。

demo on dbfiddle.uk

答案 1 :(得分:0)

您的查询看起来不错,您只是缺少一个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子句的一部分。