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

时间:2017-11-14 12:21:48

标签: sybase sybase-iq

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

为什么?如果试图绕过它,它也不起作用,

我该怎么办?

感谢你的答案。

AS建议我尝试做

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

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

2 个答案:

答案 0 :(得分:2)

作为标准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"不起作用,因为施放减少(圆)小数但不是减少你的数字的方法。这就是为什么你会收到"数据类型转换的问题" 它不是小数问题,这是一个问题,你的数字太大了。

答案 1 :(得分:1)

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