sql inner join and avg()返回错误数据

nr9pn0ug  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(353)

我试图从包含视频数据的表中选择所有行,然后将它们的所有分级作为一个表合并 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返回一个结果,但它只返回一行错误的平均值?
有人能告诉我为什么会这样,我能做些什么吗?

lp0sw83n

lp0sw83n1#

你需要使用 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 . 如果没有,那么严格地说,我们将不得不做另一个加入。

57hvy0tb

57hvy0tb2#

尝试替换 INNER JOINLEFT JOIN . 请参阅此答案和本页上的更多详细信息(搜索 AVG + GROUP BY + JOINS )

相关问题