一尘不染

MS Access四舍五入精度与分组依据

sql

为什么将每个员工的平均分数求和时不等于(曾经)的员工平均数?

平均

SELECT Avg(r.score) AS rawScore
FROM (ET INNER JOIN Employee AS e ON ET.employeeId = e.id) INNER JOIN (Employee AS a INNER JOIN Review AS r ON a.id = r.employeeId) ON ET.id = r.ETId
WHERE (((e.id)=@employeeId))

返回 80.737


每月平均值

SELECT Avg(r.score) AS rawScore, Format(submitDate, 'mmm yy') AS MonthText,  month(r.submitDate) as mm, year(submitDate) as yy
FROM (ET INNER JOIN Employee AS e ON ET.employeeId = e.id) INNER JOIN (Employee AS a INNER JOIN Review AS r ON a.id = r.employeeId) ON ET.id = r.ETId
WHERE (((e.id)=@employeeId))
GROUP BY month(r.submitDate), year(submitDate), Format(submitDate, 'mmm yy')
ORDER BY year(submitDate) DESC, month(r.submitDate) DESC

退货

Average Score : Month 
81.000 : Oct 09 
80.375 : Sep 09 
82.700 : Aug 09 
83.100 : Jul 09 
75.625 : Jun 09

我知道80.737是正确的,因为我手工计算了记录并进行了平均。但是此表的平均值(小数点后3位)为80.56,相差太远。是否在每一步都弄乱了四舍五入?


阅读 182

收藏
2021-05-23

共1个答案

一尘不染

平均值的平均值将不会在所有值上返回与单个平均值相同的结果,除非所有取平均值的组具有相同数量的项目。

如果每个月的rawScore员工人数不同,那将使您的结果发生偏差。

考虑以下示例:如果我们计算数字1到10的平均值,则平均值为5.5。

计算从1到5的数字的平均值,平均值是3,从6到10的平均值是8。两组都有5个项目,所以3和8的平均值= 5.5。

但是,如果您将第一个平均值作为1和2 = 1.5,而将第二个平均值作为3到10 =
6.5,则平均值1.5和6.5给出4。这是歪斜的,因为第一组有2个项目,第二组有8个项目。

除此之外,罗伯特·哈维(Robert Harvey)指出,四舍五入的累积效应。

2021-05-23