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真题
