2016-05-18 7 views
1

Ähnliche Fragen wurden bereits gestellt, aber keine haben angesprochen, warum die AVG-Funktion in MSSQL einen anderen Wert als SUM and-divide liefert, wenn keine NULL Werte in den Daten vorhanden sind.Unterschied in der Genauigkeit zwischen AVG-Funktion und Summenaufteilung

Ich möchte das Ergebnis für die Daten in diesem (vereinfachten) TestTable berechnen.

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 

Die Partitur als score = sum(CorrectCount)/sum(CorrectCount+IncorrectCount)

Die folgende Abfrage

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

erzeugt diese Ausgabe berechnet wird:

ScoreAverage  ScoreSumDivide 
0.876666666666667 0.886363636363636 

Wo dieser Unterschied kommt das? Was macht AVG anders als die SUM and-divide? Ich bin auf der Suche nach einer Erklärung, warum das Ergebnis der AVG anders ist als das explizite SUM(CorrectCount)/SUM(CorrectCount+IncorrectCount). Ich erwarte, dass es aufgrund der Genauigkeit oder Rundung innerhalb der AVG Funktion ist.

+0

Können Sie bitte weitere Informationen dazu hinzufügen, was genau Sie fragen? – TheGameiswar

+2

In einem von ihnen ist die Operation "Summe der Werte"/Anzahl. In der anderen Summe der Werte/Summe der Werte. Probieren Sie SUM (CorrectCount/(CorrectCount + IncorrectCount))/Count (*) aus, die avg entsprechen. –

Antwort

2

Es ist einfach, wie die Mathematik funktioniert. Ihr Score-Durchschnitt nimmt einen Durchschnitt der einzelnen Prozentsätze. Wenn C1, C2 ... Cn Ihre korrekte Noten und I1, I2 ... In Ihre falschen Noten und „N“ ist die Anzahl der Datensätze dann die Mathematik wie folgt aussehen:

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

Ihre Summe durchschnittliche erste Summe aller von deinen korrekten Punkten und summiere alle deine Gesamtnoten und berechne dann das prozentuale Verhältnis. Die Mathematik dieser Blick wie folgt:

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

Beide Zahlen sind sinnvoll, aber der zweite wird besser widerspiegeln, was der Prozentsatz der richtigen zählt, wo für den gesamten Datensatz.

1

Ihre Durchschnittsberechnung möchte geändert werden;

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

Dies gibt den korrekten Wert von 0,886363 (39/44) zurück, anstatt wie ein Rundungsproblem ohne es aussieht.

2

Ich denke, Sie berechnen einfach verschiedene Sachen dort. Das Aquivalent für AVG sollte SUM (CorrectCount/(CorrectCount + IncorrectCount))/COUNT (*) sein.

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

Wahrscheinlich wurde mein Kommentar nicht verstanden, also erweitern ich es hier. Angenommen, Sie Richtig/Falsch gelten als habe:

5/2 3/1

Averaging Exakt/(Correct + Falsch) Mittel (5/7 + 3/4)/2 = 41/56 jedoch Sum (richtig)/sum (Correct + falsch) Mittel (5 + 3)/(7 + 4) = 8/11

41/56 = 8/11

Wenn ja: Sum (Correct/(Korrekt + Falsch))/Zählen wäre: (5/7 + 3/4)/2 = 41/56 was gleich dem Durchschnittswert ist.

Verwandte Themen