Freigeben über


try_avg-Aggregatfunktion

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