Heim > Datenbank > MySQL-Tutorial > Wie berechnet man den Durchschnitt mehrerer Spalten mit NULL-Werten in SQL Server korrekt?

Wie berechnet man den Durchschnitt mehrerer Spalten mit NULL-Werten in SQL Server korrekt?

DDD
Freigeben: 2024-12-27 04:08:10
Original
825 Leute haben es durchsucht

How to Correctly Calculate the Average of Multiple Columns with NULL Values in SQL Server?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage