如何通过 jsonḃ postgres 求和列组

问题描述 投票:0回答:1

嗨,我有一个包含此值的列 jsnoḃ

proyectos:
nomḃre:character_varying
fecha:datetime
campos: jsonḃ

campos的价值是=

{"lista": [{"valor": "10", "nombre": "sueldo"}, {"valor": "20", "nombre": "sueldo"}, {"valor": "25", "nombre": "sueldo"}]}

我运行这个查询ḃ但不起作用

SELECT jsonb_array_elements(campos->'lista')->'nombre' as content,

       sum(((jsonb_array_elements(campos->'lista')->'valor'))::numeric) as cantidad
 FROM proyectos GROUP BY jsonb_array_elements(campos->'lista')->'nombre

控制台向我显示消息:

ERROR:  cannot cast type jsonb to numeric
LINE 3: ...((jsonb_array_elements(campos->'lista')->'valor'))::numeric)...
                                                             ^
********** Error **********

ERROR: cannot cast type jsonb to numeric
SQL state: 42846
Character: 137

有什么想法吗?

json postgresql aggregate-functions jsonb
1个回答
1
投票

在横向连接中使用函数

jsonb_array_elements()
来获取数组元素作为
value
,使用
->>
运算符将 json 对象获取为文本并将
valor
对象转换为数字。

select value->>'nombre' as nombre, sum((value->>'valor')::numeric)
from proyectos
cross join jsonb_array_elements(campos->'lista')
group by 1

 nombre | sum 
--------+-----
 sueldo |  55
(1 row) 
© www.soinside.com 2019 - 2024. All rights reserved.