0

这是我的问题..

我有一群学生每个季度都有 gpa 分数。我需要找到所有季度的平均增幅。计算这个的最准确方法是什么(考虑到零)?

      studentID  q1     q2     q3     q4     avgIncrease
      123456789  3.41   2.86   3.29   3.86    ???
      234567891  1.23   2.54   1.25   4.0     ???
      345678912  2.01   1.23   3.12   3.57    ???

我尝试在下面编写代码,但我得出的平均值与使用 excel 计算时的平均值不同。

SELECT     StudentId, q1, q2, q3, q4, 
(
    ((q2 - q1) / NULLIF (q1, 0)) + 
    ((q3 - q2) / NULLIF (q2, 0)) + 
    ((q4 - q3) / NULLIF (q3, 0))
)/3 AS avgIncrease
FROM  gpaTable
4

2 回答 2

1

基本上,这是一道数学题。

假设q1=A,q2=B,q3=C,q4=D,那么区别是:

B - A + C - B + D - C = - A + D = D - A

将所有内容除以 3(3 个差异),您应该得到与 Excel 相同的答案。

因此,查询应该是这样的:

SELECT StudentId, q1, q2, q3, q4, ((q4 -q1)/3) avgIncrease
FROM gpaTable

顺便说一句,我假设在你的例子中,StudentId上面的三行应该是不同的。

于 2013-06-13T22:01:01.083 回答
1

除了算术之外,整个算法都是有缺陷的。

考虑一个学生的分数从 3 到 2 到 1 到 3 的变化。这种计算的平均变化是 0.389。这意味着什么?

如果分数是 3、2、0.1 和 3,则“平均变化”为 9.24。

3, 2, 0, 3 给出 -0.444。

在所有情况下,开始值和结束值都是相同的,并且没有变化。因此,这并不是问题的真正答案,但是您尝试做的事情没有任何意义。

要在整个课程中进行平均更改,您应该只使用 (Q4 - Q1) / Q4 (当然,使用与语言相关的检查以防止除以零)。

于 2013-06-13T22:01:06.137 回答