在PostgreSQL中聚合JSON

威尔·詹金斯

我有一个json列,其条目如下所示:

{
  "pages": "64",
  "stats": {
    "1": { "200": "55", "400": "4" },
    "2": { "200": "1" },
    "3": { "200": "1", "404": "13" },
  }
}

“统计信息”是包含http状态代码与计数的(各种大小的)集合。

我想将统计信息汇总到两个计算列中-一列为200响应的总数,另一列为响应的总数(包括200s)。

专线小巴

您可以使用两个横向联接取消嵌套内部对象,然后进行条件聚合:

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)

DB Fiddle上的演示

no_responses | no_200_responses 
-----------:| ---------------:
          74 | 57

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章