【问题标题】:MySQL WITH ROLLUP returns incorrect (or unexpected) resultsMySQL WITH ROLLUP 返回不正确(或意外)的结果
【发布时间】:2011-12-21 01:11:11
【问题描述】:

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

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

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

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。

我做错了吗?

【问题讨论】:

  • 你能简化它以删除连接吗?

标签: mysql rollup


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。是否有可靠的方法来获得增量结果?
  • 把它包起来。获取没有汇总的结果,然后用第二个选择包装它,这次使用汇总。例如:SELECT ... FROM (SELECT ... GROUP ....) inside_name ... ROLLUP ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多