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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>