PostgreSQL sum类型转换为bigint

PostgreSQL sum类型转换为bigint,sql,postgresql,types,aggregate-functions,bigint,Sql,Postgresql,Types,Aggregate Functions,Bigint,我正在对整型列执行sum(),我希望将结果类型转换为bigint,以避免出现错误。然而,当我尝试使用sum(myvalue)::bigint时,它仍然会给我一个超出范围的错误 我可以对查询做些什么来让它工作吗?或者我必须将列类型更改为bigint吗?结果明显大于可以容纳的值: -9223372036854775808至+9223372036854775807 Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作 如果没有,您可以将基类型强制转换为bigint

我正在对整型列执行sum(),我希望将结果类型转换为bigint,以避免出现错误。然而,当我尝试使用sum(myvalue)::bigint时,它仍然会给我一个超出范围的错误


我可以对查询做些什么来让它工作吗?或者我必须将列类型更改为bigint吗?

结果明显大于可以容纳的值:

-9223372036854775808至+9223372036854775807

Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作

如果没有,您可以将基类型强制转换为
bigint
,从而在任何情况下强制结果为
numeric

SELECT sum(myvalue::int8) ...

结果显然比我们所能承受的更大:

-9223372036854775808至+9223372036854775807

Postgres在这种情况下返回。你不应该做任何事情,它应该在没有显式强制转换的情况下工作

如果没有,您可以将基类型强制转换为
bigint
,从而在任何情况下强制结果为
numeric

SELECT sum(myvalue::int8) ...

我用下面的语句解决了我的问题

SUM(CAST(gross_amount AS Integer))
这是以SUm bigint的形式给出列的结果


注意:我的“总金额”列是双精度类型。

我使用以下语句解决了我的问题

SUM(CAST(gross_amount AS Integer))
这是以SUm bigint的形式给出列的结果

注意:我的“总金额”列是双精度类型。

在执行操作之前,您需要强制转换它:

SUM(myvalue::bigint)
您需要在执行操作之前强制转换它:

SUM(myvalue::bigint)

Try sum(myvalue::bigint)
sum(myvalue)::bigint
的意思是“在
myvalue
上计算聚合函数
sum
,然后将结果强制转换为
bigint
”-因此,在强制转换发生时,
sum()
已经选择了它的结果类型,sum为smallint或int参数返回
bigint,为bigint参数返回numeric,为浮点参数返回双精度,否则与参数数据类型相同
,因此可能不需要内部强制转换。实际上,整数和溢出bigint所需的行数可能首先在其他方面失败(如磁盘空间、IO带宽等)。虽然我看到过一些边缘情况,它实际上会溢出。尝试sum(myvalue::bigint)
sum(myvalue)::bigint
的意思是“计算聚合函数
sum
over
myvalue
,然后将结果转换为
bigint
”——因此,在转换发生时,
sum()
已经选择了它的结果类型。在文档中,sum为smallint或int参数返回
bigint,为bigint参数返回numeric,为浮点参数返回双精度,否则与参数数据类型相同
,因此可能不需要内部强制转换。实际上,整数和溢出bigint所需的行数可能首先在其他方面失败(如磁盘空间、IO带宽等)。虽然我见过一些边缘情况,它实际上会溢出。猜得好,但我应该指定这些值在bigint范围内。@AaronKreider:一般来说,您应该提供表定义(使用
\d mytable
从psql获得的)并更具体一些。“值”仍然是不明确的…很好的猜测,但我应该指定值在bigint范围内。@AaronKreider:一般来说,您应该提供表定义(使用
\d mytable
从psql获得的内容)并更具体一些。“价值观”仍然模棱两可。。。