使用 json 路径对 jsonb 对象执行分组

Perform group by on jsonb object using a json path

我在 Postgres 列中有一个名为 metrics 的 jsonb 对象,其结构如下:

{"http": {"GET": {"statusCode": {"200": {"count": 100}, "500": {"count": 322}}}}}

我想通过不同的 httpmethodstatusCode 获得总计数,以便我可以使用 Grafana 绘制它。有人可以指点我如何使用 group by 吗?预期结果应为:

httpMethod statusCode sum(count)
GET        200        100
GET        500        322

假设结构不变,计数为整数值:

SELECT h.key AS http_method
     , s.key AS status_code
     , sum((s.value->>'count')::int) AS sum_count
FROM   tbl t
     , jsonb_each(t.js->'http') h
     , jsonb_each(h.value->'statusCode') s
GROUP  BY h.key, s.key;

db<>fiddle here

jsonb_each() 在隐式 CROSS JOIN LATERAL 连接中是关键因素。

关于LATERAL