avg
funkcja agregacji
Dotyczy: Databricks SQL 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 aDECIMAL(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