You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对jsonb嵌套字段多父键下的price字段提取并排序

PostgreSQL JSONB 提取最大Price并排序

需求说明

我有一个jsonb类型的data字段,结构如下:

{
    "prices": {
        "[parent key]": {
            "price": 20
        }
    }
}

其中[parent key]有5种可能取值,需要实现:

  • 提取每个条目的price值,若单条数据包含多个price父键,取其中最大值
  • 最终结果按price降序排列

示例数据

create table my_table(
  id int generated by default as identity primary key,
  data jsonb);
insert into my_table select * from jsonb_populate_recordset(null::my_table,
'[{
  "id": 1,
  "data": {
    "prices": {
      "x": {"price": 20}
    }
  }
},
{
  "id": 2,
  "data": {
    "prices": {
      "y": {"price": 86}
    }
  }
},
{
  "id": 3,
  "data": {
    "prices": {
      "z": {"price": 21},
      "b": {"price": 41}
    }
  }
}]');

解决方案SQL

基础查询(返回结构化数据)

SELECT 
  id,
  MAX((value->>'price')::int) AS price
FROM my_table,
     jsonb_each(data->'prices')
GROUP BY id
ORDER BY price DESC;

返回JSON格式结果

如果需要直接返回JSON数组,使用以下SQL:

SELECT json_agg(row_to_json(t)) AS result
FROM (
  SELECT 
    id,
    MAX((value->>'price')::int) AS price
  FROM my_table,
       jsonb_each(data->'prices')
  GROUP BY id
  ORDER BY price DESC
) t;

期望结果

[
  {
    "id": 2,
    "price": 86
  },
  {
    "id": 3,
    "price": 41
  },
  {
    "id": 1,
    "price": 20
  }
]

内容的提问来源于stack exchange,提问作者tehawtness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:55:09