try_avg
-Aggregatfunktion
Gilt für: Databricks SQL Databricks Runtime 11.3 LTS und höher
Gibt den Mittelwert zurück, der aus Werten einer Gruppe berechnet wird. Im Falle eines Überlaufs wird NULL zurückgegeben.
Syntax
try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Diese Funktion kann auch mithilfe der OVER
-Klausel als Fensterfunktion aufgerufen werden.
Argumente
expr
: Ein Ausdruck, der einen numerischen Wert oder einen Intervallwert zurückgibt.cond
: Ein optionaler boolescher Ausdruck, der die für die Aggregation verwendeten Zeilen filtert.
Gibt zurück
Der Ergebnistyp wird wie für die Argumente berechnet:
DECIMAL(p, s)
: Der Ergebnistyp ist einDECIMAL(p + 4, s + 4)
-Wert. Wenn die maximale Genauigkeit für DECIMAL erreicht wird, wird die Genauigkeit nicht weiter erhöht, um den Verlust signifikanter Stellen zu vermeiden.- Jahres-/Monats-Intervall: Das Ergebnis ist ein
INTERVAL YEAR TO MONTH
-Wert. - Tages-/Zeit-Intervall: Das Ergebnis ist ein
INTERVAL YEAR TO SECOND
-Wert. - In allen anderen Fällen ist das Ergebnis ein DOUBLE-Wert.
NULL-Werte innerhalb der Gruppe werden ignoriert. Wenn eine Gruppe leer ist oder nur aus NULL-Werten besteht, ist das Ergebnis NULL.
Bei Angabe von DISTINCT
wird der Durchschnitt berechnet, nachdem Duplikate entfernt wurden.
Um im Falle eines Überlaufs einen Fehler anstelle von NULL zu erzeugen, verwenden Sie avg.
Beispiele
> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT try_avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT try_avg(col) FROM VALUES (INTERVAL '1' YEAR), (INTERVAL '2' YEAR) AS tab(col);
1-6
-- Overflow results in NULL for try_avg()
> SELECT try_avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
NULL
-- Overflow causes error for avg() in ANSI mode.
> SELECT avg(col) FROM VALUES (5e37::DECIMAL(38, 0)), (5e37::DECIMAL(38, 0)) AS tab(col);
Error: CANNOT_CHANGE_DECIMAL_PRECISION