我想通过 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
metal_id | cnt :------- | --: 1 | 5 2 | 1 5 | 4
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句