如何让Athena的ROUND函数结果匹配Redshift?
让Athena的ROUND结果匹配Redshift的截断行为
Redshift在这类场景下是直接截断保留两位小数,而Athena的ROUND函数遵循标准四舍五入规则(第三位小数≥5时进位),所以会出现结果差异。要让Athena匹配Redshift的结果,有两种实用方法:
方法1:用
TRUNC函数直接截断
Athena原生支持TRUNC函数,可直接指定保留的小数位数,舍弃后续所有部分,完全贴合Redshift的截断逻辑:TRUNC(avg(list), 2)比如对15.8448执行该语句,会直接得到15.84,和Redshift结果一致。
方法2:通过数值缩放实现截断
如果不想用TRUNC,也可以用FLOOR函数配合缩放来实现:FLOOR(avg(list) * 100) / 100原理是先把平均值放大100倍,取不大于该值的最大整数(即截断小数部分),再缩小回原比例,同样能得到15.84的结果。
注:如果涉及负数(如-15.8448),两种方法都会得到-15.84,和Redshift的截断逻辑对齐。
内容的提问来源于stack exchange,提问作者skurr
相关产品推荐
相关产品推荐

