【问题标题】:Aggregate function AVG and SUM is changing my data type size column in SybaseIQ聚合函数 AVG 和 SUM 正在更改 Sybase IQ 中的数据类型大小列
【发布时间】:2018-04-27 09:37:45
【问题描述】:

我在 Sybase Iq 中收到错误,因为聚合函数(AVG 和 SUM)正在改变我的列的大小,当我在目标列中插入聚合函数列的值时,结果对于目标列。

示例:

            Salary
          -----------    
            0,4565
            0,4555
            0,4399
             ..
             ..

在我的程序中我需要写

        SUM(salary)/AVG(salary)

当我写它时

       select  SUM(salary)/AVG(salary) as AVG_Salary
          from mytable
             group by salary

结果我收到了

                AVG_Salary
             ----------------
            0,425000000000000000000000000  
            0,455000000000000000000000000
            0,442132124300000000000000000
            1,545646464743879540386969949
              ... 
              ...

这是为什么呢?如果尝试四舍五入,它也不起作用,

我能做什么?

感谢您的热心解答。

建议我尝试做

   cast(AVG_Salary) as decimal (12,9)  --the size of my destination column

它也不起作用。 我收到错误“无法进行数据类型转换”

【问题讨论】:

    标签: sybase sap-iq


    【解决方案1】:

    作为具有聚合功能的标准 SybaseIQ 显示完整结果,但 十进制在您的目标表中应该不是问题。 如果你试过转换器

        cast(AVG_Salary) as decimal (12,9)  
    

    而您遇到“无法进行数据类型转换”的问题仅仅是因为您的数据太大。

    我的意思是它可以做到这一点:

                AVG_Salary           cast(AVG_Salary) as decimal (12,9)     
            ------------------      ------------------------------------    
              1,6655040959559          1,665504095    --ok                  
              12,666664554543          12,666664554   --ok
              1123,8190832083          --Error  
    

    问题来自您的聚合函数 SUM,可能它使结果如此之大,在这种情况下“Cast”不起作用,因为 cast reduce(round) decimals 但它不是减少数字的方法。这就是您收到“数据类型转换”问题的原因 这不是小数问题,而是您的数字太大的问题。

    【讨论】:

      【解决方案2】:

      如果你不想这样,使用 cast(avg(...) as numeric(9,4))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-12
        • 2013-08-14
        • 2013-11-23
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多