You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:02:40