如何在MySQL查询中计算DiscountTotal字段中D数组的元素总和?
解决MySQL中JSON数组元素求和问题
针对你的需求,要计算discount_details表中每条记录DiscountTotal字段里D数组的元素总和,你原来的语句仅提取了数组,未进行求和操作,以下是两种可行方案:
方案一:使用JSON_TABLE(MySQL 8.0及以上版本)
MySQL 8.0引入的JSON_TABLE函数可以将JSON数组转换为关系型表结构,再通过SUM()求和:
SELECT dd.ID, SUM(jt.value) AS DiscountSum FROM discount_details dd JOIN JSON_TABLE( dd.DiscountTotal, '$.D[*]' COLUMNS (value INT PATH '$') ) jt GROUP BY dd.ID;
JSON_TABLE将DiscountTotal中的D数组拆分为每行的value字段- 通过
SUM(jt.value)对每个ID对应的数组元素求和,GROUP BY dd.ID确保按每条记录计算总和
方案二:自定义函数(兼容MySQL 5.7及以下版本)
如果你的MySQL版本低于8.0,可以创建自定义函数遍历数组元素求和:
1. 创建求和函数
DELIMITER // CREATE FUNCTION JSON_ARRAY_SUM(json_arr JSON) RETURNS INT DETERMINISTIC BEGIN DECLARE total INT DEFAULT 0; DECLARE i INT DEFAULT 0; DECLARE arr_len INT; SET arr_len = JSON_LENGTH(json_arr); WHILE i < arr_len DO SET total = total + JSON_EXTRACT(json_arr, CONCAT('$[', i, ']')); SET i = i + 1; END WHILE; RETURN total; END // DELIMITER ;
2. 使用函数查询
SELECT ID, JSON_ARRAY_SUM(JSON_EXTRACT(DiscountTotal, '$.D')) AS DiscountSum FROM discount_details;
- 函数
JSON_ARRAY_SUM接收JSON数组,通过循环遍历每个元素并累加求和 - 调用时先通过
JSON_EXTRACT提取D数组,再传入函数计算总和
内容的提问来源于stack exchange,提问作者Niranjan Kumar Chowdam
相关产品推荐
相关产品推荐

