Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Databricks SQL
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 aDECIMAL(p + 4, s + 4)
. Jeśli maksymalna precyzja dlaDECIMAL
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
. - 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.
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 spark.sql.ansi.enabled to false
, przepełnienie zwraca NULL
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