跳到主要内容

try_avg:安全计算平均值

速查结论

try_avg(expr) 是 Spark SQL 中用于从一组值中计算平均值,溢出时返回 NULL 而非报错的聚合函数。

语法

try_avg(expr)

参数说明

参数说明
expr需要计算平均值的表达式,可以是数值列或数值表达式

功能说明

try_avg(expr)avg 函数类似,从一组值中计算算术平均值。区别在于:当计算结果发生溢出时,try_avg 返回 NULL 而不会抛出异常。这对于处理可能超出数据类型范围的大数值集合非常有用。

示例

> SELECT try_avg(col) FROM VALUES (1), (2), (3) AS tab(col);
2.0
> SELECT try_avg(col) FROM VALUES (1), (2), (NULL) AS tab(col);
1.5
> SELECT try_avg(col) FROM VALUES (interval '2147483647 months'), (interval '1 months') AS tab(col);
NULL

常见报错与避坑指南

  • 溢出返回 NULL:当参与计算的数值之和超出范围时,try_avg 返回 NULL 而非报错。如果业务逻辑不允许 NULL 结果,需要先用 avg 验证数据量级是否存在溢出风险。
  • NULL 值处理try_avg 会自动忽略 NULL 值进行计算。若所有值均为 NULL,则返回 NULL。
  • 与 avg 的区别:仅在溢出行为上有差异。如果数据量级可控,avg 足以满足需求;处理超大数值或不可信数据时优先使用 try_avg

Since: 3.3.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

备注「数据仓库技术」加入社群,每日一道大厂SQL真题

交流微信二维码

你可能还想看