Presto除法运算结果为0的原因及解决⽅法+cast⽤法Presto 除法/运算结果为0的原因及解决⽅法
当我想统计⼀个数据⽐例使⽤/ 结果为0,加号数据正常:
语法:
select sum(case when storecode ='15'then1else0end)/count(1)from orders;
但是同样的语句在hive中执⾏是ok的
在presto中:两个value相除,⾄少有⼀个为浮点数才能返回正确结果
select typeof(count(1)) from orders; 返回值:bigint
select 123 / 345 from orders limit 1;结果仍然为0
正确执⾏:****(⽤cast把其中⼀个转换为浮点型)
select sum(case when storecode ='15'then1else0end)/ cast(count(1)as double)from orders;
我发现另⼀种好的⽤法
select sum(case when storecode ='15'then1else0end)*1.00/count(1)from orders;
我们把分⼦乘1.00,结果就会⾃动保留两位⼩数,乘1.000就会保留3位(对于presto亲测有效)cast ⽤法
presto的转换函数:cast
cast(value AS type) 显式转换⼀个值的类型如cast(1 as double)将数字1转为double类型
SQL语句:
select * from table where date=20180101
在hive中正常执⾏,presto中会报错:operator equal(varchar, bigint) are not registered
原因:Presto不⽀持隐式转换,要求什么格式的参数,就⼀定得是什么格式的参数
typeof的用法
改为select * from table where date=‘20180101’

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。