類似の質問が以前に依頼されましたが、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
のように計算されるが、この出力を生成しますか? AVG
はSUM
とは何か違うのですか? AVGの結果が明示的なSUM(CorrectCount)/SUM(CorrectCount+IncorrectCount)
と異なる理由を説明したいと思います。私はそれが精度またはAVG
関数の内部の四捨五入によると期待しています。
正確な質問は何ですか? – TheGameiswar
そのうちの1つでは、操作は「合計値」/カウントです。他の値の合計/値の合計。 avgに対応するSUM(CorrectCount /(CorrectCount + IncorrectCount))/ Count(*)を試してください。 –