Oracle使用json_objectagg时如何过滤JSON数组中符合条件的条目
解决方法
你只需要在原有代码的基础上做两处调整:
- 在
JSON_TABLE的列定义中新增city字段的解析规则 - 增加
WHERE条件过滤符合要求的城市记录
修改后的完整代码如下:
select json_objectagg(key "name" value "age") into v_patch from( with t(dta) as ( select json_query(:data, '$') from dual ) select "name", "age" from t cross join json_table(dta, '$' columns(nested path '$[*]' columns( "name" varchar2(1024) path '$.name', "age" varchar2(1024) path '$.age', "city" varchar2(1024) path '$.city' -- 新增city字段解析 ) ) ) where "city" in ('Bigville', 'Smallville') -- 过滤指定城市 );
逻辑说明
- 新增的
city字段解析会从原JSON数组的每个对象中提取城市信息,供过滤使用 WHERE条件直接筛选出城市为Bigville或Smallville的记录,只有符合条件的记录才会被json_objectagg聚合成最终的JSON对象
运行后生成的结果就是你需要的{"Tony": "20", "Lucas": "40"}。
内容的提问来源于stack exchange,提问作者user5507535
相关产品推荐
相关产品推荐

