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

Oracle SQL中如何对JSON数组的totalCapacity值求和?

解决JSON数组字段中totalCapacity的求和问题

你的问题出在JSON_VALUE无法直接处理JSON数组结构——它只能提取单个标量值,直接用$.totalCapacity路径匹配数组时会返回null,最终SUM(null)自然也是null。需要先把JSON数组拆分成独立行,再对每行的totalCapacity求和,以下是不同数据库的实现方案:

SQL Server 方案

使用OPENJSON解析JSON数组,将数组中的每个对象拆分为单独的行,再分组求和:

SELECT
    a.id,
    a.country,
    a.city,
    SUM(CAST(j.totalCapacity AS DECIMAL(10,2))) AS total_capacity
FROM
    A a
CROSS APPLY OPENJSON(a.capacity)
WITH (totalCapacity DECIMAL(10,2) '$.totalCapacity') j
GROUP BY
    a.id,
    a.country,
    a.city;

MySQL 方案

使用JSON_TABLE函数展开JSON数组,再进行求和:

SELECT
    a.id,
    a.country,
    a.city,
    SUM(j.totalCapacity) AS total_capacity
FROM
    A a
JOIN JSON_TABLE(
    a.capacity,
    '$[*]' COLUMNS(totalCapacity DECIMAL(10,2) PATH '$.totalCapacity')
) j
GROUP BY
    a.id,
    a.country,
    a.city;

PostgreSQL 方案

使用jsonb_array_elements(或json_array_elements,根据字段类型是jsonb还是json)展开数组,再聚合求和:

SELECT
    a.id,
    a.country,
    a.city,
    SUM((j.obj->>'totalCapacity')::DECIMAL(10,2)) AS total_capacity
FROM
    A a
CROSS JOIN LATERAL jsonb_array_elements(a.capacity) j(obj)
GROUP BY
    a.id,
    a.country,
    a.city;

以上方案都会先将JSON数组中的每个totalCapacity值拆分为独立行,再对同一id、country、city的行求和,最终得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:37:11