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

PostgreSQL 11嵌套JSONB数组查询:取值与统计问题求助

解决方案:PostgreSQL 11 JSONB数组处理

针对你提出的两个需求,我结合你的表结构和测试数据,整理了直接可用的SQL解决方案:

1. 根据type.displayName获取对应外层value

比如要提取displayName为flag3的外层value,可以用jsonb_array_elements把JSONB数组拆分成单个对象,再通过条件过滤目标值:

SELECT elem->>'value' AS target_value
FROM public.test,
     jsonb_array_elements(testcol) AS elem
WHERE elem->'type'->>'displayName' = 'flag3';

这个语句会把testcol里的JSON数组展开成每行一个元素,筛选出type.displayName匹配flag3的元素后,取出对应的value字段。如果有多个匹配项,会返回所有符合条件的value值。

2. 统计flag4的出现次数

同样先拆分数组,再对符合条件的元素进行计数:

SELECT COUNT(*) AS flag4_count
FROM public.test,
     jsonb_array_elements(testcol) AS elem
WHERE elem->'type'->>'displayName' = 'flag4';

这里通过COUNT(*)统计所有type.displayName为flag4的元素数量——不管该元素是否包含value字段,只要type的displayName匹配就会被计入统计。

小提示

  • jsonb_array_elements是PostgreSQL专门用来展开JSONB数组的函数,能把数组内的每个元素转为单独的数据行,方便逐个处理。
  • 操作符->用于获取JSONB对象的属性(返回JSONB类型),->>用于获取属性的文本值(返回text类型),可以根据场景灵活选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:07:12