try_avg
funkcja agregacji
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
Zwraca średnią obliczoną z values grupy. Jeśli występuje przepełnienie, zwraca wartość NULL.
Składnia
try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
Tę funkcję można również wywołać jako funkcję window przy użyciu klauzuli OVER
.
Argumenty
-
expr
: wyrażenie zwracające 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 YEAR 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
zostanie określona, średnia jest obliczana po usunięciu duplikatów.
Aby zgłosić błąd zamiast wartości NULL w przypadku przepełnienia, użyj średniej.
Przykłady
> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT try_avg(DISTINCT col) FROM VALUES (1), (1), (2) AS tab(col);
1.5
> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT try_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