MS访问舍入精度与分组依据

CRi*_*ice 5 sql precision ms-access group-by rounding

为什么每个月的员工平均得分总和等于员工平均得分(曾经)?

平均

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))
Run Code Online (Sandbox Code Playgroud)

返回 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
Run Code Online (Sandbox Code Playgroud)

返回

Average Score : Month 
81.000 : Oct 09 
80.375 : Sep 09 
82.700 : Aug 09 
83.100 : Jul 09 
75.625 : Jun 09 
Run Code Online (Sandbox Code Playgroud)

我知道80.737是正确的,因为我已经手工记录并完成了平均值.但是这张桌子的平均值(小数点后3位)是80.56,这太远了.是否在每一步都进行了舍入?

Dal*_*ale 7

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

如果每个月有不同数量的员工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还指出了四舍五入的累积效应.