我有一个json列,其条目如下所示:
{
"pages": "64",
"stats": {
"1": { "200": "55", "400": "4" },
"2": { "200": "1" },
"3": { "200": "1", "404": "13" },
}
}
“统计信息”是包含http状态代码与计数的(各种大小的)集合。
我想将统计信息汇总到两个计算列中-一列为200
响应的总数,另一列为响应的总数(包括200
s)。
您可以使用两个横向联接取消嵌套内部对象,然后进行条件聚合:
select
sum(z.cnt::int) no_responses,
sum(z.cnt::int) filter(where z.code::int = 200) no_200_responses
from mytable t
cross join lateral jsonb_each(t.data -> 'stats') as x(kx, obj)
cross join lateral jsonb_each_text(x.obj) as z(code, cnt)
no_responses | no_200_responses -----------:| ---------------: 74 | 57
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句