Abrufen des Durchschnitts von drei Spalten pro Zeile in SQL

7

Die AVG()Funktion in SQL bearbeitet bestimmte Spaltendaten. Aber hier wollen wir den Durchschnitt von drei solchen Spalten für jede Zeile berechnen. In Mathe würden wir tun

AVG=(col1 + col2 + col3)/3

Ebenso: Gibt es eine zu berechnende Abfrage AVG(col1, col2, col3...)?

smo
quelle

Antworten:

9

Wenn die Spalten nicht nullwertfähig sind, verwenden Sie einfach

(col1 + col2 + col3)/3

funktioniert einwandfrei (obwohl Sie bei einigen RDBMS möglicherweise einen nicht ganzzahligen Zähler oder Divisor benötigen, um eine ganzzahlige Division zu vermeiden).

Für nullfähige Spalten möchten Sie möglicherweise etwas wie verwenden

SELECT CASE
         WHEN COALESCE(col1, col2, col3) IS NOT NULL THEN 
         ( COALESCE(col1, 0) + COALESCE(col2, 0) + COALESCE(col3, 0) ) / 
            (CASE WHEN col1 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col2 IS NULL THEN 0 ELSE 1 END + 
             CASE WHEN col3 IS NULL THEN 0 ELSE 1 END)
       END

Unter SQL Server können Sie auch verwenden

SELECT *,
       (SELECT AVG(Col)
        FROM   (VALUES(Col1),
                      (Col2),
                      (Col3)) V(Col)) AS col_average
FROM   YourTable
Martin Smith
quelle