Redshift除法结果无小数问题求解:计算百分比时结果为0
Redshift整数除法返回0的问题解决方法
这是因为Redshift中整数之间的除法会默认返回整数结果——1701除以84936的商小于1,所以直接取整为0,之后再转成numeric类型也只是把整数0转换成带小数位的0而已,本质上没有改变计算结果。
要解决这个问题,核心是让除法运算以非整数类型执行,有几种简单的实现方式:
方法1:将其中一个操作数转换为numeric/float类型
在除法运算前,把被除数或除数转成numeric(或decimal、float)类型,这样Redshift会用浮点逻辑计算除法,保留小数部分:
select 1701::numeric / 84936;
或者显式指定精度:
select cast(1701 as numeric(10,2)) / 84936;
方法2:通过乘以1.0将整数转为浮点型
这是更简洁的写法,用1.0(浮点常量)乘以其中一个整数,强制触发浮点运算:
select 1701 * 1.0 / 84936;
可选:调整小数位数
如果需要固定小数位数,可以用round()函数或者再次转换类型来格式化结果:
-- 保留6位小数 select round(1701::numeric / 84936, 6); -- 转换为指定精度的numeric select cast(1701::numeric / 84936 as numeric(10,6));
执行以上任意一种方法,你都会得到正确的小数结果(约0.020027),而不是0。
内容的提问来源于stack exchange,提问作者Andres Urrego Angel
相关产品推荐
相关产品推荐

