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
DDDOriginal
2024-12-27 04:08:10905Durchsuche

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

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!

Stellungnahme:
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