MySQL JSON类型字段如何获取数组中大于指定值的部分元素?
在MySQL 8中筛选JSON数组里大于指定值的元素
针对你提到的场景,确实可以通过MySQL 8.0提供的JSON函数组合实现需求,核心思路是先将JSON数组拆分为行数据,筛选后再重新聚合成JSON数组,具体实现如下:
- 用
JSON_TABLE函数把JSON数组转换为关系型表结构,将数组中的每个元素拆成单独的行 - 通过WHERE子句筛选出大于2的元素
- 借助
JSON_ARRAYAGG函数将筛选后的元素重新组合成JSON数组
对应的基础查询语句:
SELECT JSON_ARRAYAGG(value) AS filtered_array FROM Jtest, JSON_TABLE(jscol, '$[*]' COLUMNS(value INT PATH '$')) AS jt WHERE value > 2;
如果表中有多条记录(比如存在主键id区分不同行),需要按记录分组处理每个数组,可调整语句为:
SELECT id, JSON_ARRAYAGG(value) AS filtered_array FROM Jtest, JSON_TABLE(jscol, '$[*]' COLUMNS(value INT PATH '$')) AS jt WHERE value > 2 GROUP BY id;
补充说明:
JSON_TABLE是MySQL 8.0新增函数,专门用于将JSON数据转换为关系型表,方便用传统SQL做筛选操作JSON_ARRAYAGG负责将多行数据聚合为单个JSON数组,匹配最终输出JSON格式的需求
内容的提问来源于stack exchange,提问作者kw.h
相关产品推荐
相关产品推荐

