在 MySQL 中达到平均水平

Posted

技术标签:

【中文标题】在 MySQL 中达到平均水平【英文标题】:Getting average in MySQL 【发布时间】:2014-04-07 00:10:10 【问题描述】:

我有一个使用 mysql 的问题。我有 2 张桌子,一张带有游戏名称,一张带有不同的游戏评分。我希望能够按名称搜索游戏并查看每个游戏的平均评分。到目前为止,我设法获得了平均评分,但我只会看到 1 个游戏的评分,而不是多个条目。到目前为止,这是我的查询:

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating
    FROM games
    JOIN reviews
    ON games.id = reviews.game
    WHERE games.name LIKE '%spider%'
    AND type = '7'
    AND rating != 0

我希望你们中的一些聪明人可以帮助我解决这个问题! 谢谢,罗伯特

【问题讨论】:

【参考方案1】:

您必须在正确的字段上使用GROUP BY 子句来获取每个组的平均值,否则它将计算所有行的平均值。我猜是games.id,但取决于您的表模式。

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating
FROM games
JOIN reviews
ON games.id = reviews.game
WHERE games.name LIKE '%spider%'
AND type = '7'
AND rating != 0
GROUP BY games.id;

阅读更多关于所谓的aggregate functions

【讨论】:

【参考方案2】:

您必须使用GROUP BY games.name 来分隔不同的名称。问题是AVG 是一个折叠结果的汇总函数。 GROUP BY 打破了结果。

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating 
FROM games 
  JOIN reviews ON games.id = reviews.game 
WHERE games.name LIKE '%spider%' AND type = '7' AND rating != 0
GROUP BY games.name

【讨论】:

以上是关于在 MySQL 中达到平均水平的主要内容,如果未能解决你的问题,请参考以下文章

MySQLMySQL复制与高可用水平扩展架构实战

Android Textview 平均分配水平方向

2020平均薪资什么水平?

R语言使用fmsb包可视化雷达图(radar chart蜘蛛图spider plot)独立显示多个数据对象的雷达图添加平均水平灰色区域每个雷达图都和平均水平进行对比

出勤率低于平均水平的 SQL 查找组

如何使用 SQL 分析函数选择工资低于部门平均水平的员工?