Teilen über


avg Aggregatfunktion

Gilt für:Häkchen für „Ja“ Databricks SQL Häkchen für „Ja“ Databricks Runtime

Gibt den Mittelwert zurück, der aus Werten einer Gruppe berechnet wird. Diese Funktion ist ein Synonym für mean Aggregatfunktion.

Syntax

avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]

Diese Funktion kann auch mithilfe der -Klausel als OVER aufgerufen werden.

Argumente

  • expr: Ein Ausdruck, der in einen numerischen Wert oder in ein Intervall ausgewertet wird.
  • 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 ein DECIMAL(p + 4, s + 4)-Wert. Wenn für DECIMAL die maximale Genauigkeit erreicht ist, wird die Erhöhung des Skalierungsfaktors begrenzt, um den Verlust signifikanter Ziffern zu vermeiden.
  • Jahres-/Monats-Intervall: Das Ergebnis ist ein INTERVAL YEAR TO MONTH-Wert.
  • Tageszeitintervall: Das Ergebnis ist ein INTERVAL DAY 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 Nullen besteht, lautet NULLdas Ergebnis .

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