聚合函数 AVG 和 SUM 正在更改 SybaseIQ 中的数据类型大小列



我在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

它也不起作用。我收到错误"数据类型转换是不可能的"

作为具有聚合函数的标准 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 减少了(四舍五入(小数,但它不是减少数字的方法。 这就是为什么您收到"数据类型转换"的问题这不是十进制问题,而是您的数字太大的问题。

如果你不想这样,请使用 cast(avg(...( 作为数字(9,4((

最新更新