Avg of float inconsistency

Die Auswahl gibt direkt bei 23.000 Zeilen zurück.
Die Ausnahme gibt zwischen 60 und 200 Zeilen (und nicht dieselben Zeilen) zurück.
Ausnahme sollte 0 zurückgeben, da es sich um eine Ausnahme handelt. Wählen Sie ein @ au

PK: [docSVenum1]. [EnumID], [docSVenum1]. [ValueID], [FTSindexWordOnce]. [WordID]

[tf] ist ein float und ich bekomme float nicht genau
Aber ich dachte naiv avg (float) wäre wiederholbar
Avg (float) scheint wiederholbar zu sein

Was ist die Lösung
TF liegt zwischen 0 und 1 und ich brauche nur 5 signifikante Ziffern
Ich brauche nur avg (TF), um die gleiche Zahl zu haben, die ausgeführt wird, um @ auszuführe
Decimal (9,8) gibt mir genug Präzision und wenn ich auf Dezimal (9,8) umsetze, gibt der Befehl except richtig 0 zurück.
Ich kann [TF] in Dezimal (9,8) ändern, aber es ist ein bisschen Arbeit und eine Menge Regressionstests, da einige Tests, die [tf] verwenden, mehr als einen Tag in Anspruch nehmen, um @ auszuführe
Ist die Änderung von [TF] auf Dezimal (9,8) die beste Lösung?

  SELECT [docSVenum1].[enumID], [docSVenum1].[valueID], [FTSindexWordOnce].[wordID]
       , avg([FTSindexWordOnce].[tf]) AS [avgTFraw]
    FROM [docSVenum1] 
    JOIN [docFieldLock] 
           ON [docFieldLock].[sID] = [docSVenum1].[sID] 
          AND [docFieldLock].[fieldID] = [docSVenum1].[enumID] 
          AND [docFieldLock].[lockID] IN (4, 5) /* secLvl docAdm */ 
    JOIN [FTSindexWordOnce] 
           ON [FTSindexWordOnce].[sID] = [docSVenum1].[sID]
GROUP BY [docSVenum1].[enumID], [docSVenum1].[valueID], [FTSindexWordOnce].[wordID]

except 

  SELECT [docSVenum1].[enumID], [docSVenum1].[valueID], [FTSindexWordOnce].[wordID]
       , avg([FTSindexWordOnce].[tf]) AS [avgTFraw]
    FROM [docSVenum1] 
    JOIN [docFieldLock] 
           ON [docFieldLock].[sID] = [docSVenum1].[sID] 
          AND [docFieldLock].[fieldID] = [docSVenum1].[enumID] 
          AND [docFieldLock].[lockID] IN (4, 5) /* secLvl docAdm */ 
    JOIN [FTSindexWordOnce] 
           ON [FTSindexWordOnce].[sID] = [docSVenum1].[sID]
GROUP BY [docSVenum1].[enumID], [docSVenum1].[valueID], [FTSindexWordOnce].[wordID] 

order by [docSVenum1].[enumID], [docSVenum1].[valueID], [FTSindexWordOnce].[wordID]

In diesem Fall ist tf die Häufigkeit von tf-idf
tf Normalisierung ist subjektiv und erfordert nicht viel Präzision
Avg (tf) muss von Auswahl zu Auswahl konsistent sein, da sonst die Ergebnisse nicht konsistent sind
In einer Auswahl mit Joins brauche ich einen konsistenten Durchschnitt (tf)
enn Sie mit Dezimalstellen und einer geringen Genauigkeit für tf arbeiten, erhalten Sie konsistente Ergebniss

Antworten auf die Frage(2)

Ihre Antwort auf die Frage