2016-05-18 10 views
1

類似の質問が以前に依頼されましたが、NULLの値がデータに存在しない場合、MSSQLのAVG関数が明示的なSUMと異なる値を生成する理由については触れていません。AVG関数とsum-divideの間の精度の差

この(簡易)TestTableのデータのスコアを計算したいと思います。

ScoreAverage  ScoreSumDivide 
0.876666666666667 0.886363636363636 

この違いはどこから来ない:

CorrectCount IncorrectCount 
5.0   0.0 
3.0   2.0 
5.0   0.0 
4.0   0.0 
3.0   0.0 
5.0   0.0 
2.0   1.0 
5.0   0.0 
5.0   0.0 
2.0   2.0 

スコアはscore = sum(CorrectCount)/sum(CorrectCount+IncorrectCount)

次のクエリ

SELECT 
    AVG(CorrectCount/(CorrectCount+IncorrectCount)) as ScoreAverage, 
    SUM(CorrectCount)/SUM(CorrectCount+IncorrectCount) as ScoreSumDivide 
FROM TestTable 

のように計算されるが、この出力を生成しますか? AVGSUMとは何か違うのですか? AVGの結果が明示的なSUM(CorrectCount)/SUM(CorrectCount+IncorrectCount)と異なる理由を説明したいと思います。私はそれが精度またはAVG関数の内部の四捨五入によると期待しています。

+0

正確な質問は何ですか? – TheGameiswar

+2

そのうちの1つでは、操作は「合計値」/カウントです。他の値の合計/値の合計。 avgに対応するSUM(CorrectCount /(CorrectCount + IncorrectCount))/ Count(*)を試してください。 –

答えて

2

これは、単に数学がどのように機能するかです。あなたのスコア平均は、個々のパーセンテージの平均をとります。 C1、C2 ... Cnはあなたの正しいスコアとI1、I2であれば...ではあなたの間違ったスコアであり、「N」は、レコードの数ですその後、数学は以下の通りになります。

C1/(C1+ I1) + C2 /(C2 + I2) + ... + Cn /(Cn + In) 
    ------------------------------------------------- 
          N 

あなたの合計平均第1の和すべてをあなたの合計得点を合計してパーセント比率を計算します。次のようにこの外観の数学:

   C1 + C2 + ... + Cn 
    ---------------------------------------------- 
    (C1+ I1) + (C2 + I2) + ... + (Cn + In) 

どちらの数字は意味があるが、2番目は、より優れたデータセット全体の正しい数の何パーセントを反映します。

1

平均計算で修正が必要です。

,AVG(CorrectCount)/(AVG(CorrectCount)+AVG(IncorrectCount)) as ScoreAverage 

これは、丸めの問題のように見えるのではなく、正しい値0.886363(39/44)を返します。

2

私はあなたが単純に異なるものを計算していると思います。 AVGのaquivalentはSUM(CorrectCount /(CorrectCount + IncorrectCount))/ COUNT(*)でなければなりません。

SELECT 
    AVG(CorrectCount/(CorrectCount+IncorrectCount)) as ScoreAverage, 
    SUM(CorrectCount/(CorrectCount + IncorrectCount))/COUNT(*) ScoreSumDivide 
3

私のコメントは分かりませんでしたので、私はここでそれを拡張しています。

5/2 3/1

正しい/(正しい+不正な)手段(5/7 + 3/4)ただし/ 2 = 56分の41 を平均化:あなたのように正解/不正解数を持っていると仮定合計(正)/ SUM(正しい+不正な)手段(5 + 3)/(7 + 4)= 8/11

56分の41 = 8/11

あなたがやった場合:!(正しい合計を/(正解+不正確))/それは(5/7 + 3/4)/ 2 = 41/56と数えます。これは平均に等しいです。

関連する問題