我试图从包含视频数据的表中选择所有行,然后将其所有评分作为 AVG()
从另一个表中加入。
问题是每个视频只有 1 行,但每个视频有很多评分,因此我必须获取所有评分并找到每个视频的平均值。
我有这段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 返回结果,但只返回 1 行,且平均值错误?
有人可以向我解释为什么会发生这种情况以及我可以做什么吗?
最佳答案
您需要使用GROUP BY
这里。在当前查询中,您正在对整个表取平均值。
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
GROUP BY
t1.video_id
ORDER BY
t1.video_id DESC
LIMIT 12
请注意,我的回答假设 video_id
是 videos_approved
的主键表,在这种情况下,即使按 video_id
分组,我们也可以从该表中选择任何列。 。如果没有,那么严格来说我们将不得不进行另一次连接。
关于mysql - SQL INNER JOIN 和 AVG() 返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115480/