我有一个带有整数列的表,其中有一些相当大的数字。我试图在其中平均一些值,有时它在其他时间起作用,它给出了这个错误

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

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

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

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

最佳答案

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

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

08-04 08:09