SQL最准确的计算平均增长的方法

时间:2013-06-13 21:44:45

标签: sql sql-server-2005

这是我的问题..

我有一群学生每个季度都有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

2 个答案:

答案 0 :(得分: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在上面的三行中应该是不同的。

答案 1 :(得分:1)

除了算术之外,整个算法都存在缺陷。

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

如果得分分别为3分,2分,0.1分和3分,则“平均变化”为9.24。

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

在所有情况下,起始值和结束值都相同,并且没有任何变化。所以这不是问题的答案,但对你要做的事情毫无意义。

要对整个课程进行平均更改,您应该使用(Q4 - Q1)/ Q4(当然,语言相关检查将除以零)。