【问题标题】:How to sum of jsonb inner field in postgres?如何对postgres中的jsonb内部字段求和?
【发布时间】:2020-07-01 09:07:07
【问题描述】:

我想通过 metal_id 对表测试组中的一个字段 PC 值求和。

我试过这个Postgres GROUP BY on jsonb inner field 但不适合我,因为我有不同的 JSON 格式

tbl_test

id json
1  [
    {
        "pc": "4",
        "metal_id": "1"
    },
    {
        "pc": "4",
        "metal_id": "5"
    }
]

2. [
    {
        "pc": "1",
        "metal_id": "1"
    },
    {
        "pc": "1",
        "metal_id": "2"
    },       
]

我想要的输出是:(按 metal_id 和 pc 的总和分组)。

提前致谢!

   [
         "metal_id": 1
        {
          "pc": "5",
        }
      ]

【问题讨论】:

    标签: sql json postgresql group-by


    【解决方案1】:

    可以使用json_array_element()扩展jsonb数组,然后通过metal id聚合:

    select obj ->> 'metal_id' metal_id, sum((obj ->> 'pc')::int) cnt
    from mytable t
    cross join lateral jsonb_array_elements(t.js) j(obj)
    group by obj ->> 'metal_id'
    order by metal_id
    

    Demo on DB Fiddle

    metal_id | cnt :------- | --: 1 | 5 2 | 1 5 | 4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2016-05-09
      • 2015-10-06
      • 1970-01-01
      相关资源
      最近更新 更多