使用 json 路径对 jsonb 对象执行分组
Posted
技术标签:
【中文标题】使用 json 路径对 jsonb 对象执行分组【英文标题】:Perform group by on jsonb object using a json path 【发布时间】:2021-06-05 20:57:34 【问题描述】:我在 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
【问题讨论】:
【参考方案1】:假设结构是常量,并且计数是整数值:
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小提琴here
jsonb_each()
在隐式 CROSS JOIN LATERAL
连接中是关键因素。
关于LATERAL
:
【讨论】:
@Erwin。非常感谢。它就像一种魅力,虽然现在我正在努力将它融入 grafana,但这是一场不同的战斗。以上是关于使用 json 路径对 jsonb 对象执行分组的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Slick 在 Postgres 中将 json 对象插入到 jsonb 类型的列中
如何将 JSON 对象推送到 postgresql 中 jsonb 列中的数组