5

为什么每个月员工的平均得分加起来不等于员工得分的平均分(曾经)?

平均的

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,这离得太远了。分组是否与每一步的舍入混淆?

4

2 回答 2

7

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

如果每个月有不同数量的员工 rawScore,它会扭曲你的结果。

考虑这个例子:如果我们计算数字 1 到 10 的平均值,则平均值是 5.5。

计算 1 到 5 的平均值,平均值为 3,6 到 10 的平均值为 8。两组都有 5 个项目,因此 3 和 8 的平均值 = 5.5。

However, if you take the first average as 1 and 2 = 1.5, and the second average as 3 through 10 = 6.5, then average 1.5 and 6.5 gives 4. This is skewed because the first group has 2 items, and the second has 8.

In addition to this will be the cumulative effects of rounding that Robert Harvey noted.

于 2009-10-15T05:18:54.760 回答
1

我不希望这两个结果是相同的,原因很简单,如果进行四舍五入,则每月分数会四舍五入,而每年仅四舍五入一次。

也就是说,我也会检查记录计数,看看它们是否符合要求。考虑到日期等格式,有可能在每月查询的裂缝中漏出一两条记录。

于 2009-10-15T05:02:00.020 回答