varios promedio funcion estandar ejemplo desviacion campos avg sql-server types

sql-server - funcion - sql promedio varios campos



SQL Server dando desbordamiento aritmético al calcular avg (2)

Tengo una tabla con una columna entera con algunos números bastante grandes. Estoy tratando de promediar algunos valores en esto y, a veces funciona otras veces se da este error

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

Lo he desglosado y esta muestra produce el error

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

¿Alguien sabe cómo puedo obtener esto para calcular el promedio?


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

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


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