kylin计算百分比
1.多cube关联查询数据
with tmp1 as (
select * from user where type =1
) ,
tmp 2 as (
select * from info where area_code ='1.1.1'
),
tmp3 as (
select * from people
)
select * from tmp t1 left join tmp2 t2 on t1.A=t2.B and t1.C=t2.D left join tmp3 t3 on t1.A=t3.E
2.计算比例值保留两位小数:ROUNDH函数
round函数的语法是:ROUND(number,num_digits),即:Round(数值,保留的小数位数)
round()
- kylin数值计算需要使用decimal类型,需要用到类型转化函数 cast
语法:CAST (expression AS data_type)
expression:任何有效的表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:转换后的数据类型
- 组合起来得到保留两位小数的结果
-- 数值增大100倍,拼接%后得到百分比
round(cast(num*100 as decimal)/total,2) perme
3.小数结果拼接字符串: concat函数
concat(str1, str2,…) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
concat(cast(coalesce(perme,0) as varchar),'%')
问题1:类型转化后50/60等以0结尾的数字变为科学记数法。5E1
解决办法:
使用decimal进行计算,不要使用double及浮点数运算。
问题2:类型转化失败,decimal不能直接转化为varchar(这里不知道是不能还是怎么了,耗费几个小时才解决)
解决办法:
使用coalesce函数转化,语法:COALESCE ( expression [ ,…n ] ) 返回第一个非null参数,参数个数至少一个。全部为null则返回null
这里使用这个方法的本意是将null转化为0后计算百分比,转化后发现可以和varchar进行类型转化了。猜测是这个函数的返回值类似于Object,也就是无类型的对象。所以可以转化为任意类型对象。不知道是不是这样。
问题3:数值为0的记录转化后的结果为.00%。
解决办法:
我这里是使用case when 处理的就不再赘述了。
用到的函数都是比较基础的函数,结果没有头绪的整了半天。
基础不牢、地动山摇。诸君共勉
版权声明:本文为weixin_43646701原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。