2009-07-29 18 views
36

Tengo una tabla con una columna entera con algunos números bastante grandes. Estoy tratando de promediar algunos valores en este y a veces funciona otras veces da este errorSQL Server dando desbordamiento aritmético al calcular avg

"Error de desbordamiento aritmético convertir la expresión a tipo de datos int."

He roto hacia abajo y esto muestra produzca el error

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

¿Alguien sabe cómo puedo conseguir esto para calcular la media?

Respuesta

55

Internamente SQL Server está sumando los valores (para dividir por el recuento posterior) y almacenándolos en el tipo de datos de columnas - en este caso un int - que no es lo suficientemente grande para contener la suma - si emite el valor como primer término, sumará los valores que también almacenan esos valores en un bigint, lo que probablemente sea lo suficientemente grande, y luego podrá realizar el cálculo promedio.

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

Tendrá que asignar el número a algo más grande que un int, digamos un biginteger, porque para calcular el SQL promedio se suman todos los valores como un int, y aquí es donde se está desbordando.

+0

No puedo cambiar la estructura de la tabla fácilmente, así que voy con la respuesta que hace esto durante la consulta – user129211

Cuestiones relacionadas