2013-11-25 59 views
0

我正在做一個整數列的sum(),我想將結果轉換爲bigint - 以避免錯誤。但是,當我嘗試使用sum(myvalue):: bigint它仍然給我一個超出範圍的錯誤。PostgreSQL總結類型爲bigint

有什麼我可以做的查詢來得到這個工作?還是必須將列類型更改爲bigint?

+1

嘗試總和(myvalue :: bigint) –

+0

此解決方案有效。 –

+0

'sum(myvalue):: bigint'的意思是「通過'myvalue'計算聚合函數'sum',然後將結果轉換爲'bigint'」 - 因此在轉換髮生時,sum()具有已經選擇了它的結果類型。 – IMSoP

回答

3

結果顯然比bigint可以容納更大:

-9223372036854775808到9223372036854775807

的Postgres在這種情況下返回numeric。你不應該做任何事情,它應該只是沒有明確的演員工作。

如果不是,則可以將基本類型轉換爲bigint,從而在任何情況下強制結果爲numeric

SELECT sum(myvalue::int8) ... 
+0

好的猜測,但我應該指定這些值在bigint範圍內。 –

+0

@AaronKreider:通常你應該提供表格定義(你可以從psql獲得'\ d mytable')並且更具體。 「價值觀」仍然模棱兩可...... –

1

我用下面的語句

SUM(CAST(gross_amount AS Integer)) 

這是給列總和BIGINT的結果,

注意解決我的問題:我的列gross_amount是double類型。