1. mysql数据库中的ext存的是json字段,如下:
CREATE TABLE `volume` (
`volumeId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`ext` json DEFAULT NULL COMMENT '扩展字段',
PRIMARY KEY (`volumeId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='量表'
具体存的值是一个json对象套了个数组,数组里又是对象,如下:
2. 我们的目标是要获取9月的monthVolume之和,9月的dayVolume之和?
关于JSON_EXTRACT获取JSON串的语法,请自行百度,这里我直接列sql语句,如下,
SELECT
JSON_EXTRACT(`ext` , '$.monthList') AS fieldModels , // 先获取这个月份的数组
JSON_EXTRACT(
JSON_EXTRACT(`ext` , '$.monthList') ,
"$[8].monthVolume" // 9月的monthVolume(下表从0开始)
) AS monthVol ,
JSON_EXTRACT(
JSON_EXTRACT(`ext` , '$.monthList') ,
"$[8].dayVolume" // 9月的dayVolume(下表从0开始)
) AS dayVol
FROM
`volume`
通过上面的sql语句就拿到了monthVol和dayVol的数据,如下截图:
拿到了这两列数据,接下来就简单了,直接求和。
SELECT
sum(monthVol) ,
sum(dayVol)
FROM
(
SELECT
JSON_EXTRACT(`ext` , '$.monthList') AS fieldModels ,
JSON_EXTRACT(
JSON_EXTRACT(`ext` , '$.monthList') ,
"$[8].monthVolume"
) AS monthVol ,
JSON_EXTRACT(
JSON_EXTRACT(`ext` , '$.monthList') ,
"$[8].dayVolume"
) AS dayVol
FROM
`volume`
WHERE
years = 2021
AND isDelete = 0
) list
3. 模糊查询下面Json串里的specification字段,"$[*].specification" 任意一个数组里包含specification的字段
测试数据如下:
{"overLoad": 0, "goodsList": [{"goodsType": "方便面", "specification": "一袋001"}, {"goodsType": "方便袋", "specification": "一捆"}]}
{"overLoad": 0, "goodsList": [{"goodsType": "方便面", "specification": "垃圾袋00sss222s"}, {"goodsType": "方便袋", "specification": "一捆"}]}
查询语句如下:
select extJson from `Order` where
JSON_EXTRACT(JSON_EXTRACT(`extJson`, '$.goodsList'), "$[*].specification") LIKE '%垃圾袋%'