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 处理的就不再赘述了。

用到的函数都是比较基础的函数,结果没有头绪的整了半天。
基础不牢、地动山摇。诸君共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值