标签:Decimal ts 笔记 Substr 小数位 Avg Impala Round
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。还望各位不吝赐教。
标签:Decimal,ts,笔记,Substr,小数位,Avg,Impala,Round 来源: https://blog.csdn.net/wlei1825928/article/details/100106279
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。