avg funkcja agregacji

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime

Zwraca średnią obliczoną na podstawie wartości grupy. Ta funkcja jest synonimem mean funkcji agregującej.

Składnia

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

Tę funkcję można również wywołać jako funkcję okna przy użyciu klauzuli OVER .

Argumenty

  • expr: wyrażenie arytmetyczne, które daje w wyniku wartość liczbową lub interwał.
  • cond: opcjonalne wyrażenie logiczne filtrujące wiersze używane do agregacji.

Zwraca

Typ wyniku jest obliczany w taki sam sposób, jak dla argumentów.

  • DECIMAL(p, s): typ wyniku to a DECIMAL(p + 4, s + 4). Jeśli maksymalna precyzja dla DECIMAL zostanie osiągnięta, zwiększenie skali będzie ograniczone, aby uniknąć utraty znaczących cyfr.
  • przedział rok-miesiąc: wynik to INTERVAL YEAR TO MONTH.
  • Przedział czasowy dnia: wynik to INTERVAL DAY TO SECOND.
  • DECFLOAT: Wynik jest taki:DECFLOAT(34)
  • We wszystkich innych przypadkach wynik to DOUBLE.

Wartości null w grupie są ignorowane. Jeśli grupa jest pusta lub składa się tylko z wartości null, wynik to NULL.

Jeśli DISTINCT określono, średnia jest obliczana po usunięciu duplikatów.

Dla wejść DECFLOAT, z domyślnym trybem zaokrąglenia, przelew powoduje nieskończoność zamiast błędu.

Dla innych typów wejścia, jeśli wynik przewyższa typ wyniku, Azure Databricks powoduje błąd ARITHMETIC_OVERFLOW. Aby zwrócić NULL, użyj try_avg.

Ostrzeżenie

Dla wejść innych niż DECFLOAT, w Databricks Runtime, jeśli spark.sql.ansi.enabled jest , falsezamiast błędu zwraca się przepełnienie NULL .

Typowe warunki błędów

Przykłady

> 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: ARITHMETIC_OVERFLOW