使用 Postgres 15,如何从表中获取每行中的列总和?
-86750 | 1728 | 1500 | 61.69 | 415 | 130.18 | 303.99 | 288.57 | 93.44 | 78.06 | 0 | 561.69 | 257.49
-86100 | 798 | 700 | 68 | 415 | 130 | 303 | 288 | 128 | 20 | 0 | 561 | 257
特别是,我想将具有int
或float
数据类型的列的值加在一起,而不是引用它们的名称。
我的意思是不使用类似的东西:
for each row ....
select toto+tata+titi+tutut from .... where rawid=....
但更像是:
for each row
if column is type float or int
variable+= it
fi
这可能吗?
您可以使用JSONB 函数。请注意,这不能区分不同类型的数字,只能区分数字和字符串。
数据库<>小提琴
这将执行以下操作,所有操作都在子查询内:
number
,作为单独的行这样做的效率将比仅显式命名每一列差得多。
你也可以吃你的布丁。意思是,您只需命名表即可获得结果,并且仍然可以获得最佳性能,动态构建命令。
这将构建您的命令:
对 SQL 注入特别安全。看:
这里我使用psql元命令
\gexec
立即执行构建的命令:看:
或者,创建一个执行动态 SQL 的函数。
您可能希望将可以包含
null
的列换行COALESCE
以不使总和无效(如上例第 3 行所示)。您可能希望转换为float8
(可以保存任何数字类型的总和)以获得一致的结果类型:pg_attribute
关于和的手册pg_type
。