我正在尝试从包含视频数据的表中选择所有行,然后我将其所有评分作为AVG()
从另一个表中加入。
事情是每个视频只有一行,但每个视频都有很多评分,因此我必须获得所有评分并找到每个视频的平均值。
我有这段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返回一个结果,但它只返回一行错误的平均值?
有人可以向我解释为什么会这样,我能做些什么吗?
答案 0 :(得分: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
进行分组,我们也可以从该表中选择任何列。如果没有,那么严格来说我们将不得不再做一次加入。
答案 1 :(得分:0)
尝试将INNER JOIN
替换为LEFT JOIN
。
详情请见this answer和this page(搜索AVG
+ GROUP BY
+ JOINS
)