PostgreSQL中如何在同查询内求和JSONB数组生成的虚拟列
解决方案
要把展开后的JSON数组数值求和并返回单行结果,直接用聚合函数SUM()配合jsonb_array_elements就能实现,还能按需调整小数分隔符格式:
修改后的查询语句
-- 格式化输出为逗号作为小数分隔符的格式 SELECT TO_CHAR(SUM((jsonb_array_elements((balance)::jsonb->'savings')->>'amount')::float), 'FM999999999,99') AS virtual_balance FROM accounts WHERE id = 58117;
如果你的数据库区域设置默认支持逗号作为小数分隔符,也可以简化成:
SELECT SUM((jsonb_array_elements((balance)::jsonb->'savings')->>'amount')::float)::numeric(10,2) AS virtual_balance FROM accounts WHERE id = 58117;
核心逻辑说明
jsonb_array_elements负责把savings这个JSON数组展开成多行记录SUM()对这些行的amount数值进行聚合求和,直接得到单行结果TO_CHAR()用来将求和后的数值格式化为带逗号小数分隔符的字符串,满足你要的162,25格式
执行后会得到预期结果:
virtual_balance --------------- 162,25
内容的提问来源于stack exchange,提问作者Ítalo Araújo
相关产品推荐
相关产品推荐

