为什么将每个员工的平均分数求和时不等于(曾经)的员工平均数?
平均
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,相差太远。是否在每一步都弄乱了四舍五入?
平均值的平均值将不会在所有值上返回与单个平均值相同的结果,除非所有取平均值的组具有相同数量的项目。
如果每个月的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)指出,四舍五入的累积效应。