适用于: Databricks SQL
 Databricks SQL  Databricks Runtime 11.3 LTS 及更高版本
 Databricks Runtime 11.3 LTS 及更高版本
返回从组的值计算出的平均值。 如果有溢出,则返回 NULL。
语法
try_avg( [ALL | DISTINCT] expr) [FILTER ( WHERE cond ) ]
参数
- 
              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