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

如何用PSQL从嵌套JSON数组中提取最大宽度的衬衫名称

PostgreSQL嵌套JSON提取宽度最大的衬衫名称解决方案

针对warehouse表warehouse_data列中的嵌套JSON数据,要提取宽度最大的衬衫名称,可通过以下SQL实现:

方法一:排序取第一条(简洁高效)

SELECT 
    (elem #> '{names,0,name}')::text AS shirt_name
FROM 
    warehouse,
    jsonb_array_elements(warehouse_data #> '{wardrobe,apparel,variety}') AS elem
WHERE 
    id = 1
ORDER BY 
    (elem #> '{data,shirt,size,width}')::integer DESC
LIMIT 1;

方法二:匹配最大宽度值(支持多结果场景)

如果存在多个宽度相同且为最大值的衬衫,此方法可返回所有符合条件的名称:

SELECT 
    (elem #> '{names,0,name}')::text AS shirt_name
FROM (
    SELECT 
        elem,
        (elem #> '{data,shirt,size,width}')::integer AS width
    FROM 
        warehouse,
        jsonb_array_elements(warehouse_data #> '{wardrobe,apparel,variety}') AS elem
    WHERE 
        id = 1
) AS shirt_sizes
WHERE 
    width = (
        SELECT MAX((elem #> '{data,shirt,size,width}')::integer) 
        FROM warehouse,
             jsonb_array_elements(warehouse_data #> '{wardrobe,apparel,variety}') AS elem
        WHERE id = 1
    );

关键步骤说明

  • jsonb_array_elements(warehouse_data #> '{wardrobe,apparel,variety}') AS elem:将wardrobe.apparel.variety下的JSON数组展开为独立行,每个行对应一个衬衫条目。
  • elem #> '{data,shirt,size,width}'::integer:从每个条目提取宽度值并转为整数,用于排序和比较。
  • elem #> '{names,0,name}':提取每个条目names数组中第一个元素的名称(当前JSON结构中每个条目names数组仅含一个元素)。

原SQL问题说明

你之前的语句仅提取了names数组,未关联对应的宽度信息,也未做筛选排序,因此无法定位到宽度最大的衬衫名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:07