我试图从包含视频数据的表中选择所有行,然后将它们的所有分级作为一个表合并 AVG()
从另一张table。
问题是每个视频只有一行,但是每个视频有很多收视率,所以我必须得到所有的收视率,并找到每个视频的平均值。
我有一块sql
SELECT t1.video_id,
t1.video_title,
t1.video_url,
t1.video_views,
AVG(t2.videos_rating_rating) AS rating
FROM videos_approved t1
INNER JOIN videos_rating t2
ON t1.video_id = t2.videos_rating_video_fk
WHERE 1
ORDER BY video_id
DESC LIMIT 12
sql返回一个结果,但它只返回一行错误的平均值?
有人能告诉我为什么会这样,我能做些什么吗?
2条答案
按热度按时间lp0sw83n1#
你需要使用
GROUP BY
在这里。在当前查询中,对整个表取平均值。注意,我的回答假设
video_id
是的主键videos_approved
表,在这种情况下,即使按video_id
. 如果没有,那么严格地说,我们将不得不做另一个加入。57hvy0tb2#
尝试替换
INNER JOIN
与LEFT JOIN
. 请参阅此答案和本页上的更多详细信息(搜索AVG
+GROUP BY
+JOINS
)