一.前置条件
1.数据库表准备
以下是数据库中的表和字段,其中包含了很多json字段表名为:t_erecord_device_ext
其中produce_info字段存储数据结构如下所示
实际数据如下所示
下面的需求都是需要基于这张表 操作json字段实现数据过滤和查询
二.mysql根据json数据过滤
1.需求:筛选produce_info字段中、brand不为空和不为null的数据
sql实现如下:
SELECT
*
FROM
view_device_info
WHERE
produce_info ->> '$.brand' != ''
AND produce_info ->> '$.brand' != 'null'
查询结果如下:
三.mysql去除json字段brand查询出来的双引号,并且根据brand分组、查询brand同类型的device_id并使用逗号拼接,过滤空值和null值
sql实现如下:
SELECT
json_unquote(json_extract( produce_info, '$.brand' )) AS brand,
group_concat( device_id ) AS deviceIds
FROM
view_device_info
WHERE
STATUS = 0
AND produce_info ->> '$.brand' != ''
AND produce_info ->> '$.brand' != 'null'
AND owner_id = 'AHHF_QHHFY_20180408'
GROUP BY
brand
查询结果如下:
sql解释如下:
json_unquote:去除json中的双引号
json_extract:解析json
group_concat:合并聚合后的需要拼接的字段