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

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

«Ошибка арифметического переполнения при преобразовании выражения в тип данных int.»

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

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

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


person user129211    schedule 29.07.2009    source источник


Ответы (2)


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

select avg(cast(number as bigint)) from LargeNumbers
person Tetraneutron    schedule 29.07.2009
comment
Какая глупая ошибка дизайна со стороны Microsoft. - person CraigP; 06.07.2019

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

person Stephen Nutt    schedule 29.07.2009
comment
Я не могу легко изменить структуру таблицы - так что я иду с ответом, который делает это во время запроса - person user129211; 29.07.2009