avg-Aggregatfunktion

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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 ein DECIMAL(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