SQL INNER JOIN和AVG()返回错误的数据

时间:2018-05-01 11:12:53

标签: mysql sql database

我正在尝试从包含视频数据的表中选择所有行,然后我将其所有评分作为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返回一个结果,但它只返回一行错误的平均值?

有人可以向我解释为什么会这样,我能做些什么吗?

2 个答案:

答案 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_idvideos_approved表的主键,在这种情况下,即使按video_id进行分组,我们也可以从该表中选择任何列。如果没有,那么严格来说我们将不得不再做一次加入。

答案 1 :(得分:0)

尝试将INNER JOIN替换为LEFT JOIN。 详情请见this answerthis page(搜索AVG + GROUP BY + JOINS

相关问题