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

标签 mysql sql database

我试图从包含视频数据的表中选择所有行,然后将其所有评分作为 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_idvideos_approved 的主键表,在这种情况下,即使按 video_id 分组,我们也可以从该表中选择任何列。 。如果没有,那么严格来说我们将不得不进行另一次连接。

关于mysql - SQL INNER JOIN 和 AVG() 返回错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50115480/

相关文章:

c++ - MYSQL Too many connections 错误不会消失

jquery - Laravel 格式查询 json 结果

mysql - EXISTS 的 SQL 查询没有像我想的那样工作

c# - 在 C# 中运行数据库脚本

mysql - 将 TEXT 字段添加到 MySql 的 Entity Framework 模型

MYSQL 如何对两列任意组合(双向)创建UNIQUE约束

php - pdo 模块已启用,但我有 "PHP Fatal error: Class ' PDO' 未找到”!

sql - 创建索引 View

sql - 用户可以创建但不能执行存储过程

mysql - MySQL 从什么时候开始像处理 TEXT 列一样处理 VARCHAR 列?