首页 文章

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

提问于
浏览
2

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

它也不起作用 . 我收到错误“数据类型转换不可能”

2 回答

  • 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”不起作用,因为转换减少(圆)小数但不是减少数量的方法 . 这就是为什么你收到“数据类型转换”的问题,它不是小数问题,这是你的数字太大的问题 .

  • 2

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

相关问题