为什么员工每个月的平均得分相加后不等于员工(曾经)的平均得分?
Average
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))
Returns 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
Returns
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,相差太远。 group by 是否会扰乱每一步的舍入?
平均值的平均值不会返回与所有值的单个平均值相同的结果,除非所有平均组具有相同数量的项目。
如果每个月的员工 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 个项目。
除此之外,罗伯特·哈维还指出了舍入的累积效应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)