SQL Server дает арифметическое переполнение при вычислении сред.

У меня есть таблица с целым столбцом с некоторыми довольно большими числами. Im пытается усреднить некоторые значения в этом, а иногда он работает в других случаях, когда он дает эту ошибку

"Арифметическая ошибка переполнения, преобразующая выражение в тип данных int."

Я сломал его, и этот образец создает ошибку

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

Кто-нибудь знает, как я могу вычислить это среднее?

Ответ 1

Внутренне SQL Server суммирует значения (делить на счет позже) и сохраняет их в типе данных столбцов - в этом случае int - который недостаточно велик для хранения суммы - если вы задаете значение как bigint сначала он будет суммировать значения, также сохраняя эти значения в bigint - который, вероятно, достаточно велик, тогда средний расчет может продолжаться.

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

Ответ 2

Вам нужно будет присвоить номер более чем int, скажем, biginteger, потому что для вычисления среднего SQL суммирует все значения как int, и это то, где вы переполняетесь.