avg funkcja agregacji

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

Zwraca średnią obliczoną z wartości grupy. Ta funkcja jest synonimem średniej funkcji agregującej.

Składni

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, które oblicza wartość liczbową lub interwał.
  • cond: opcjonalne wyrażenie logiczne filtrujące wiersze używane do agregacji.

Zwraca

Typ wyniku jest obliczany jako argumenty:

  • DECIMAL(p, s): typ wyniku to a DECIMAL(p + 4, s + 4). Jeśli osiągnięto maksymalną dokładność dziesiętną, zwiększenie skali będzie ograniczone, aby uniknąć utraty znaczących cyfr.
  • interwał miesiąca: wynik to INTERVAL YEAR TO MONTH.
  • interwał dnia: wynik to INTERVAL DAY TO SECOND.
  • We wszystkich pozostałych przypadkach wynik jest podwójny.

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

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

Jeśli wynik przepełni typ wyniku, usługa Azure Databricks zgłasza błąd ARITHMETIC_OVERFLOW . Aby zamiast tego zwrócić wartość NULL, użyj try_avg.

Ostrzeżenie

W środowisku Databricks Runtime, jeśli wartość spark.sql.ansi.enabled to false, przepływ zwraca NULL wartość zamiast błędu.

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