json - 如何通过 jsonḃ postgres 对列组求和
问题描述
嗨,我有一个带有这个值的列 jsnoḃ
proyectos:
nomḃre:character_varying
fecha:datetime
campos: jsonḃ
坎波斯的价值是=
{"lista": [{"valor": "10", "nombre": "sueldo"}, {"valor": "20", "nombre": "sueldo"}, {"valor": "25", "nombre": "sueldo"}]}
II 运行此查询但不工作
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
任何想法 ?
解决方案
使用横向连接中的函数jsonb_array_elements()
获取数组元素 as 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)
推荐阅读
- javascript - 是否可以检查第三方域是否有权设置 cookie?
- python - 奇数输入补丁大小与自动编码器中的输出大小不同
- vba - 如何使用 VBA 验证 SAP GUI 中的活动窗口
- ios - iPhone 上的 MobileOrg 应用程序:无法与 Dropbox 同步
- python - 返回act_window(来自python代码)时如何显示警告?奥多 14
- alert - 如何在电报上设置自动按摩警报 zabbix
- javascript - 比较两个元素 textContent 不工作 JavaScript
- javascript - 使用酶测试多个类名
- python - TypeError: cannot pickle '_thread.lock' object with RQ (Redis Queue) [python 3.9 & 3.8 & 3.7]
- amazon-web-services - sts.assumeRole 获取未定义的凭据