MSQL高阶操作
MSQL语言
json串循环提取求和
SELECT
id AS uid,
sum(num) AS total_size
FROM
tbl_cmdb_ci_detail
JOIN json_table (
JSON_EXTRACT(content, '$.DiskInfo[*].DiskSize'),
'$[*]' COLUMNS (num INT path '$')
) AS numbers
GROUP BY
id
逐句解释
SELECT id AS uid, sum(num) AS total_size
SELECT:用于指定要查询的列或计算结果。
id AS uid:将 tbl_cmdb_ci_detail 表中的 id 列重命名为 uid(别名便于后续关联时区分)。
sum(num) AS total_size:对 num 列的值进行求和计算,结果命名为 total_size(用于统计磁盘总容量)。
FROM tbl_cmdb_ci_detail
声明查询的基础数据来源是 tbl_cmdb_ci_detail 表(存储核心业务数据,如服务器信息)。
JOIN json_table (...) AS numbers
json_table:数据库提供的 JSON 解析函数,用于将 JSON 格式的数据转换为关系型表结构(方便用 SQL 处理)。
JSON_EXTRACT(content, '$.DiskInfo[].DiskSize'):
从 tbl_cmdb_ci_detail 表的 content 字段(JSON 类型)中,提取 DiskInfo 数组下所有 DiskSize 的值。
示例:若 JSON 为 {"DiskInfo": [{"DiskSize": 100}, {"DiskSize": 200}]},提取结果为 [100, 200]。
'$[]' COLUMNS (num INT path '$'):
'$[*]':遍历 JSON 提取出的数组(如 [100, 200])。
COLUMNS (num INT path '$'):定义临时表的结构,创建 num 列(整数类型),取值为数组中的每个元素(即 100、200)。
AS numbers:为 json_table 生成的临时表起别名 numbers,便于后续引用。
GROUP BY id
按 tbl_cmdb_ci_detail 表的 id 列分组,结合 sum(num) 实现 “按 id 统计磁盘总容量”(例如,每个 id 对应一台服务器,统计其所有磁盘的总大小)。

REGEXP_REPLACE替换函数
SELECT REGEXP_REPLACE(
form_data->>'$.data.rannlbug',
'[,,]', -- 正则:匹配英文逗号或中文逗号
'' -- 替换为空字符串(即移除逗号)
) AS no_commas
结合concat函数可实现json格式化
concat和group_concat函数
| CONCAT | 将同一行的多个字段 / 值拼接成一个字符串 | 单条记录 | 拼接同一行的姓名 + 手机号、地址等
| GROUP_CONCAT | 将分组内多行的同一字段值拼接成一个字符串 | 分组内的多条记录 | 按用户分组拼接其所有订单号、按类别分组拼接产品名等
CONCAT(字符串1, 字符串2, ..., 字符串N)
GROUP_CONCAT([DISTINCT] 要拼接的字段 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符'])
GROUP_CONCAT(
CONCAT(
JSON_UNQUOTE(row_data - > '$.systemName_value'),
'-',
JSON_UNQUOTE(row_data - > '$.sysVersion')
) SEPARATOR '\n'
) AS GLXT

浙公网安备 33010602011771号