SQL Server在计算平均值时给出算术溢出

时间:2009-07-29 02:02:04

标签: sql-server types

我有一个带有整数列的表,其中包含一些相当大的数字。我试图在这个中平均一些值,有时它会在其他时候产生这个错误

“将表达式转换为数据类型int的算术溢出错误。”

我已将其分解,此示例产生错误

create table LargeNumbers (number int)
insert into LargeNumbers values (100000000) -- X 30
select avg(number) from LargeNumbers

有谁知道如何计算平均值?

2 个答案:

答案 0 :(得分:65)

SQL Server内部对值进行求和(以后除以计数)并将它们存储在列数据类型中 - 在这种情况下为int - 如果将值转换为以下值,则不足以容纳总和一个bigint首先它会将值存储在一个bigint中 - 这可能足够大,然后平均计算可以继续。

select avg(cast(number as bigint)) from LargeNumbers

答案 1 :(得分:5)

你需要将数字强制转换为大于int的东西,比如说一个大整数,因为要计算平均SQL将所有值相加为int,这就是你溢出的地方。