MySQL WITH ROLLUP 返回不正确(或意外)的结果

标签 mysql rollup

我有一组数据,用于定义调查表中不同地点事件的评级。

我正在尝试显示每个位置的平均评分以及最后一行中所有位置的平均值。

目前,我的查询如下所示:

SELECT 
IFNULL(l.title, 'Total') AS location,
ROUND(AVG(NULLIF(s.rating, 0)), 2) AS rating
FROM surveys s 
INNER JOIN events e
ON e.id = s.event_id
INNER JOIN locations l
ON l.id = e.location_id
GROUP BY l.title WITH ROLLUP

这为我提供了每个位置的以下值:

8.22, 8.67, 8.67, 8.56, 7.86, 8.50. 8.78, 7.33

但是,最终返回的 Total 为 8.37,但实际上应该是 8.32。

我做错了什么吗?

最佳答案

汇总使用整个表的 COUNT 和 SUM,然后进行除法。它不使用增量结果并对它们进行平均。

您将增量结果四舍五入到小数点后两位,但它们的值实际上并非如此。如果输出真实值,您会发现平均值更有意义。

尝试输出 SUM 和 COUNT,以便您可以自己验证。

关于MySQL WITH ROLLUP 返回不正确(或意外)的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7993228/

相关文章:

mysql - 如何在 drupal 中限制某些用户访问内容?

mysql - 缺少 MySQL 客户端

javascript - 如何将选中的头像存入数据库

mysql - 返回另一个表中与另一个表中的一个链接值匹配的所有值

typescript - 错误 : Illegal reassignment to import

mysql - 添加一行,其中包含每列的总计

sql - "Adding"GROUP BY 's and ORDER BY' 在一个查询中而不是单独的

php - 创建对象设计器的技术

webpack - sass-resource-loader 等效于汇总

vue.js - 汇总 Vue 3 动态 img src