Агрегатная функция try_avg

Область применения:проверка помечены да Databricks SQL проверка помечены да Databricks Runtime 11.3 LTS и выше

Возвращает среднее значение, вычисленное на основе значений группы. При переполнении возвращает значение NULL.

Синтаксис

try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]

Эту функцию также можно вызвать как функцию окна с помощью OVER предложения.

Аргументы

  • expr: выражение, возвращающее числовое или интервальное значение.
  • cond: необязательное логическое выражение для фильтрации строк, используемых для агрегирования.

Возвраты

Тип результата определяется на основе аргументов:

  • DECIMAL(p, s): результат имеет тип DECIMAL(p + 4, s + 4). Если достигнута максимальная точность для типа DECIMAL, увеличение масштаба ограничивается так, чтобы избежать потери значащих цифр.
  • для интервала типа "год-месяц": тип результата INTERVAL YEAR TO MONTH.
  • для интервала типа "время дня": тип результата INTERVAL YEAR TO SECOND.
  • Во всех остальных случаях результатом является значение DOUBLE.

Значения NULL в группе игнорируются. Если группа является пустой или состоит только из значений NULL, возвращается результат NULL.

Если указано значение DISTINCT, вычисляется среднее значение после удаления дубликатов.

Чтобы отобразить ошибку вместо значения NULL в случае переполнения, используйте функцию avg.

Примеры

> 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