Udostępnij za pośrednictwem


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 średniej 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, 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 jako argumenty:

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

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 określono średnią 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

Jeśli w środowisku Databricks Runtime 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