2009-07-29 74 views
36

時,我有一個表,在它的一些相當大的數量的整數列給出算術溢出。我試着去平均一些這方面的價值,有時它的工作原理其他時候,它給這個錯誤SQL服務器計算平均

「算術溢出錯誤將表達式轉換爲數據類型爲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

您需要將數字強制轉換爲大於int的東西,比如說一個大整數,因爲要計算平均SQL將所有值作爲整數求和,這就是溢出的位置。

+0

我不能改變表strucutre容易 - 所以即時與在查詢過程中這樣做的答案 – user129211 2009-07-29 02:11:30