使用 json 路径对 jsonb 对象执行分组
Perform group by on jsonb object using a json path
我在 Postgres 列中有一个名为 metrics 的 jsonb 对象,其结构如下:
{"http": {"GET": {"statusCode": {"200": {"count": 100}, "500": {"count": 322}}}}}
我想通过不同的 httpmethod、statusCode 获得总计数,以便我可以使用 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
:
我在 Postgres 列中有一个名为 metrics 的 jsonb 对象,其结构如下:
{"http": {"GET": {"statusCode": {"200": {"count": 100}, "500": {"count": 322}}}}}
我想通过不同的 httpmethod、statusCode 获得总计数,以便我可以使用 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
: