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

SQL/Hive如何解析并求和单行内的所有值

字符串格式列表求和解决方案

针对你存储为["5","12","13"]格式的字符串列,无需修改表结构(适配只读权限),可以利用数据库的JSON解析或字符串拆分能力实现求和,以下是主流数据库的具体方案:

MySQL 8.0+(推荐)

利用原生JSON函数直接解析数组,避免字符串替换的潜在问题:

SELECT 
    SUM(CAST(json_val AS UNSIGNED)) AS total_sum
FROM 
    your_table,
    JSON_TABLE(
        your_column,
        "$[*]" COLUMNS (json_val VARCHAR(20) PATH "$")
    ) AS parsed;

原理:JSON_TABLE将JSON数组字符串拆分为单行记录的列,再转成数值类型求和。

MySQL 5.x(无JSON_TABLE)

通过递归CTE拆分处理后的字符串:

WITH RECURSIVE split_nums AS (
    SELECT 
        SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(your_column, '[', ''), '"', ''), ',', n), ',', -1) AS num_str,
        n
    FROM 
        your_table
    CROSS JOIN 
        (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) nums
    WHERE 
        n <= LENGTH(REPLACE(REPLACE(your_column, '[', ''), '"', '')) - LENGTH(REPLACE(REPLACE(REPLACE(your_column, '[', ''), '"', ''), ',', '')) + 1
)
SELECT SUM(CAST(num_str AS UNSIGNED)) AS total_sum FROM split_nums;

注意:nums子查询中的数字数量需大于等于数组的最大元素个数。

PostgreSQL

借助JSON类型转换和数组拆分函数:

SELECT 
    SUM((json_array_elements_text(your_column::json))::integer) AS total_sum
FROM your_table;

原理:将字符串转为JSON类型,json_array_elements_text拆分出每个元素,再转成整数求和。

关键提示

  • 确保列中字符串是标准JSON数组格式(双引号、逗号分隔无多余空格),否则可能导致解析失败;
  • 所有查询均为只读操作,无需修改表或权限升级。

内容的提问来源于stack exchange,提问作者GlowFish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:52:10