it-swarm.com.de

Abrufen des Durchschnitts von drei Spalten pro Zeile in SQL

Die Funktion AVG() in SQL verarbeitet 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

Ähnlich: Gibt es eine Abfrage zur Berechnung von AVG(col1, col2, col3...)?

7
smo

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
9
Martin Smith