我有两个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
答案 0 :(得分:0)
您可以使用以下解决方案,分别使用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
,您还将获得未经表决的电影。
答案 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
子句的一部分。