avg
-Aggregatfunktion
Gilt für: Databricks SQL Databricks Runtime
Gibt den Mittelwert zurück, der aus Werten einer Gruppe berechnet wird. Diese Funktion ist ein Synonym für die Mittelwert-Aggregatfunktion.
Syntax
avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Diese Funktion kann auch mithilfe der OVER
-Klausel als Fensterfunktion aufgerufen werden.
Argumente
expr
: Ein Ausdruck, der in einen numerischen Wert oder in ein Intervall ausgewertet wird.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 DAY 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.
Wenn DISTINCT
angegeben ist, wird der Durchschnitt berechnet, nachdem Duplikate entfernt wurden.
Wenn das Ergebnis einen Überlauf des Ergebnistyps verursacht, löst Azure Databricks einen ARITHMETIC_OVERFLOW-Fehler aus. Um stattdessen NULL zurückzugeben, verwenden Sie try_avg.
Warnung
Wenn spark.sql.ansi.enabled in Databricks Runtime auf false
festgelegt ist, gibt ein Überlauf NULL
anstelle eines Fehlers zurück.
Beispiele
> SELECT avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT 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