【问题标题】:Perform group by on jsonb object using a json path使用 json 路径对 jsonb 对象执行分组
【发布时间】:2021-06-05 20:57:34
【问题描述】:

我在 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

【问题讨论】:

    标签: sql postgresql group-by grafana jsonb


    【解决方案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,但这是一场不同的战斗。
    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多