Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 -Klausel als OVER aufgerufen werden.
Argumente
-
expr: Ein Ausdruck, der einen numerischen oder Intervallwert zurückgibt. -
cond: Ein optionaler boolescher Ausdruck, der die Zeilen filtern, die für die Aggregation verwendet werden.
Rückgabe
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. - Tageszeitintervall: Das Ergebnis ist ein
INTERVAL YEAR TO SECOND-Wert. - In allen anderen Fällen ist das Ergebnis ein
DOUBLE.
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