ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Impala笔记-保留小数位问题

2019-08-27 19:39:18  阅读:1842  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有