概述
Impala笔记-保留小数位问题
- 问题描述
- 一段代码(最终代码)
- 问题分析
- 总结
问题描述
开发给了一段impala sql,表示Round函数保留小数位数时失效了,结果不准确。
一段代码(最终代码)
--需要使用Cast As Decimal
Select m.yn,
m.int_ts,
m.double_ts,
m.decimal_ts,
Round(m.double_ts, 2) r_double_ts,
Round(m.decimal_ts, 2) r_decimal_ts
From (Select o.yn,
Sum(o.ts) int_ts,
Avg(o.ts) double_ts,
Cast(Avg(o.ts) As Decimal(20, 3)) decimal_ts
From (SELECT Substr(a.zdate2, 1, 6) yn,
dateDiff('2019-07-31',
Concat(Substr(a.zin_date, 1, 4),
'-',
Substr(a.zin_date, 5, 2),
'-',
Substr(a.zin_date, 7, 2))) ts
FROM tab1 a, tab2 c
WHERE a.werks = c.gcbm
AND Substr(c.djrq, 1, 6) >= '201907') o
GROUP BY o.yn) m
结果如下:
问题分析
通过hue查看列类型时发现impala中Avg函数的返回类型为Double_Type,Round后的字段类型仍然是Double_Type;所以猜测将Avg的结果Cast为Decimal类型控制小数位(如上面的代码
)。
总结
这里还是不清楚为什么Avg在Round后会出现小数位补数的问题,只是为了解决问题而使用了Cast转为Decimal。还望各位不吝赐教。
最后
以上就是纯情季节为你收集整理的Impala笔记-保留小数位问题的全部内容,希望文章能够帮你解决Impala笔记-保留小数位问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复