2009-07-29 2 views
36

상당히 큰 숫자가 포함 된 정수 열이있는 테이블이 있습니다. 메신저에서 일부 값을 평균화하려고 시도하고 다른 경우에이 오류가 발생합니다.평균을 계산할 때 산술 오버플로가 발생하는 SQL Server

"표현식을 데이터 유형 int로 변환하는 중 산술 오버플로 오류가 발생했습니다."

나는 그것을 분해 한이 샘플 오류

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

사람이 내가이 평균을 계산하는 얻을 수있는 방법을 알고 있나요?

답변

55

내부적으로 SQL Server는 값으로 합계 (나중에 계수로 나누기) 및 열 데이터 형식 (이 경우 int를 저장하기에 충분히 크지 않음)에 저장합니다. bigint 먼저 bigint에 값을 저장하는 값을 합산합니다. 아마도 충분히 클 것이므로 평균 계산을 진행할 수 있습니다.

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

평균값을 계산하기 때문에 biginteger라고 말하면 int보다 큰 값으로 숫자를 캐스팅해야합니다. 모든 값을 int로 요약하기 때문에 오버플로가 발생합니다.

+0

쉽게 테이블을 변경할 수 없습니다. 쿼리 도중이 작업을 수행하는 답변이 나와 있습니다. – user129211

관련 문제