如何在postgres中对jsonb内部字段求和?

先生24

我想通过 metal_id 对表测试组中的一个字段PC值求和。

在 jsonb 内部字段上尝试了这个Postgres GROUP BY但对我不起作用,因为我有不同的 JSON 格式

tbl_test

id json
1  [
    {
        "pc": "4",
        "metal_id": "1"
    },
    {
        "pc": "4",
        "metal_id": "5"
    }
]

2. [
    {
        "pc": "1",
        "metal_id": "1"
    },
    {
        "pc": "1",
        "metal_id": "2"
    },       
]

我想要的输出是:(按metal_id和pc总和分组)。

提前致谢!

   [
         "metal_id": 1
        {
          "pc": "5",
        }
      ]
专卖店

可以使用json_array_element()扩展jsonb数组,然后通过金属id聚合:

select obj ->> 'metal_id' metal_id, sum((obj ->> 'pc')::int) cnt
from mytable t
cross join lateral jsonb_array_elements(t.js) j(obj)
group by obj ->> 'metal_id'
order by metal_id

DB Fiddle 上的演示

metal_id | cnt 
:------- | --: 
1 | 5 
2 | 1 
5 | 4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章