try_avg funkcja agregacji

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 11.3 LTS i nowsze

Zwraca średnią obliczoną na podstawie wartości 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ę okna 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 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 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