我在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
它也不起作用。 我发现错误"数据类型转换是不可能的"
答案 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))