Heim >Datenbank >MySQL-Tutorial >Wie berechnet man den Durchschnitt mehrerer Spalten mit NULL-Werten in SQL Server korrekt?
Durchschnitt mehrerer Spalten
Bei der Berechnung des Durchschnitts mehrerer Spalten in einer Tabelle ist es wichtig, die Nullbarkeit korrekt zu handhaben. Betrachten Sie die folgende Situation:
Problem:
Sie haben eine Tabelle namens „Anfrage“ mit den folgenden Daten:
Req_ID R1 R2 R3 R4 R5 R12673 2 5 3 7 10 R34721 3 5 2 1 8 R27835 1 3 8 5 6
Sie möchten Zeigt den Durchschnitt der Spalten R1, R2, R3, R4 und R5 an. Wenn Sie jedoch die folgende Abfrage verwenden:
Select Req_ID, Avg(R1+R2+R3+R4+R5) as Average from Request Group by Req_ID
Sie erhalten die Summe der Werte anstelle des Durchschnitts.
Lösung:
Das Problem liegt in der Handhabung von NULL-Werten. Wenn Ihre Spalten NULL-Werte zulassen, ist die Summe der NULL-Werte ebenfalls NULL. Um den Durchschnitt korrekt zu berechnen, müssen Sie die NULL-Werte ignorieren.
Syntax nach 2008:
Wenn Sie SQL Server 2008 oder höher verwenden, können Sie verwenden die folgende Syntax:
SELECT *, (SELECT AVG(c) FROM (VALUES(R1), (R2), (R3), (R4), (R5)) T (c)) AS [Average] FROM Request
Diese Syntax verwendet die VALUES-Klausel, um eine Tabelle mit einer Zeile für jede Spalte zu erstellen. Das AVG-Aggregat wird dann auf diese Tabelle angewendet und ignoriert alle Zeilen, die NULL-Werte enthalten.
Syntax vor 2008:
Wenn Sie SQL Server 2005 oder verwenden Früher können Sie die folgende Syntax verwenden:
SELECT *, (SELECT AVG(c) FROM (SELECT R1 UNION ALL SELECT R2 UNION ALL SELECT R3 UNION ALL SELECT R4 UNION ALL SELECT R5) T (c)) AS [Average] FROM Request
Diese Syntax verwendet UNION ALL, um eine Tabelle mit einer Zeile zu erstellen für jede Spalte. Das AVG-Aggregat wird dann auf diese Tabelle angewendet und ignoriert alle Zeilen, die NULL-Werte enthalten.
Das obige ist der detaillierte Inhalt vonWie berechnet man den Durchschnitt mehrerer Spalten mit NULL-Werten in SQL Server korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!