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,这太远了.是否在每一步都进行了舍入?
平均值的平均值不会返回与所有值的单个平均值相同的结果,除非平均所有组具有相同数量的项目.
如果每个月有不同数量的员工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还指出了四舍五入的累积效应.