Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当参数类型为int时,PostgreSQL sum类型转换为bigint_Postgresql_Sum_Typecast Operator - Fatal编程技术网

当参数类型为int时,PostgreSQL sum类型转换为bigint

当参数类型为int时,PostgreSQL sum类型转换为bigint,postgresql,sum,typecast-operator,Postgresql,Sum,Typecast Operator,我知道不久前有人问过同样的问题,但我看不出答案。我正在使用sum函数添加一个类型为整数的列的值,但当我添加两个15亿时,它将溢出。我希望总和结果是bigint。究竟有没有办法做到这一点?提前谢谢。我试着跟随,但没有成功 sum(count)::bigint AS total 如果我按照下面的方法做,我仍然会出错 sumcount::bigint作为总计 Caused by: org.postgresql.util.PSQLException: ERROR: cannot change data

我知道不久前有人问过同样的问题,但我看不出答案。我正在使用sum函数添加一个类型为整数的列的值,但当我添加两个15亿时,它将溢出。我希望总和结果是bigint。究竟有没有办法做到这一点?提前谢谢。我试着跟随,但没有成功

sum(count)::bigint AS total
如果我按照下面的方法做,我仍然会出错 sumcount::bigint作为总计

Caused by: org.postgresql.util.PSQLException: ERROR: cannot change data type of column "total" from integer to numeric
你应该先算算,然后再算数。即:

sum(count::bigint) as total
在postgres中,suminteger和sumbigint是不同的函数,分别返回integer和big integer

事实上,所有postgres函数不仅通过其名称标识,还通过其名称和参数类型的组合标识

如果您以前没有强制转换,那么最终将使用sum的整数版本,它总是返回整数。即使你以后将它转换为bigint。如果结果是溢出,则不能将溢出强制转换为bigint

编辑:正如abelisto正确指出的那样,sum仍然返回smallint和integer的bigint。但是,正如我所看到的,您的错误消息说不能将列总数的类型从整数更改为数字。但据我所知,total是整个操作的结果,所以即使溢出,它也应该是bigint

…不确定它是否尝试指向计数列,该列在操作后标记为total,但它阻塞了我。。。或者,如果它只是简单地说,它不能将numeric转换为bigint,这对我来说似乎更可行。它取决于计数列的实际类型。它已经是bigint还是numeric了

如果是的话,问题可能在于试图将一个非常巨大的数值类型转换为bigint,我的意思是value

你能告诉我们colunm伯爵的确切类型吗?比这更好的是:你能用一个文本值提供一个失败的例子吗

类似于但我只得到了一个bigint超出范围的错误…:

somedb=> with foo as (
    select 1000000000 as a
    union select 231234241234123
    union select 99999999999999999999999
) select sum(a) from foo;
           sum            
--------------------------
 100000000231235241234122
(1 row)

somedb=> with foo as (
    select 1000000000 as a
    union select 231234241234123
    union select 99999999999999999999999
) select sum(a)::bigint from foo;
ERROR:  bigint out of range
你应该先算算,然后再算数。即:

sum(count::bigint) as total
在postgres中,suminteger和sumbigint是不同的函数,分别返回integer和big integer

事实上,所有postgres函数不仅通过其名称标识,还通过其名称和参数类型的组合标识

如果您以前没有强制转换,那么最终将使用sum的整数版本,它总是返回整数。即使你以后将它转换为bigint。如果结果是溢出,则不能将溢出强制转换为bigint

编辑:正如abelisto正确指出的那样,sum仍然返回smallint和integer的bigint。但是,正如我所看到的,您的错误消息说不能将列总数的类型从整数更改为数字。但据我所知,total是整个操作的结果,所以即使溢出,它也应该是bigint

…不确定它是否尝试指向计数列,该列在操作后标记为total,但它阻塞了我。。。或者,如果它只是简单地说,它不能将numeric转换为bigint,这对我来说似乎更可行。它取决于计数列的实际类型。它已经是bigint还是numeric了

如果是的话,问题可能在于试图将一个非常巨大的数值类型转换为bigint,我的意思是value

你能告诉我们colunm伯爵的确切类型吗?比这更好的是:你能用一个文本值提供一个失败的例子吗

类似于但我只得到了一个bigint超出范围的错误…:

somedb=> with foo as (
    select 1000000000 as a
    union select 231234241234123
    union select 99999999999999999999999
) select sum(a) from foo;
           sum            
--------------------------
 100000000231235241234122
(1 row)

somedb=> with foo as (
    select 1000000000 as a
    union select 231234241234123
    union select 99999999999999999999999
) select sum(a)::bigint from foo;
ERROR:  bigint out of range

@如果你在编辑部分的答案是正确的。我试图从一个表列创建一个视图,列类型为int。SUM确实为int返回了bigint。因此,我不需要强制转换。不过,这个错误消息有点误导人。事实证明,我的问题是在不首先删除视图的情况下更改视图的列。我正在更新视图的一列。所以,我会把它作为一个答案。idk,但它不适用于预转换,我有一个列,它本身就是bigint,我试图做summy_列,但它返回int,它只以这种方式返回bigint summy_列::bigint。在psql v10和12上试用过。我想你应该忽略一些东西。。。你能举个例子吗?summy_column::bigint会发生什么情况?@bitfet您在编辑部分的回答是正确的。我试图从一个表列创建一个视图,列类型为int。SUM确实为int返回了bigint。因此,我不需要强制转换。不过,这个错误消息有点误导人。事实证明,我的问题是在不首先删除视图的情况下更改视图的列。我正在更新视图的一列。所以,我会把它作为一个答案。idk,但它不适用于预转换,我有一个列,它本身就是bigint,我试图做summy_列,但它返回int,它只以这种方式返回bigint summy_列::bigint。在psql v10和12上试用过。我想你应该忽略一些东西。。。你能举个例子吗?summy_column::bigint会发生什么情况?