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

Oracle中JSON_ARRAYAGG返回重复JSON_OBJECT问题解决方案咨询

解决方案

造成数组重复的核心原因是原始数据中存在多组完全相同的test_col1、test_col2、test_col3组合,聚合时会全部纳入生成JSON对象,有两种实现去重的方案:

方案1:使用JSON_ARRAYAGG自带的DISTINCT去重(推荐,Oracle 12cR2及以上版本支持)

直接在内层生成list的JSON_ARRAYAGG中增加DISTINCT关键字,对生成的JSON对象直接去重:

SELECT
    JSON_OBJECT (
        'output' VALUE JSON_ARRAYAGG(
            JSON_OBJECT(
                'common' VALUE test_col1,
                'list' VALUE JSON_ARRAYAGG(
                    DISTINCT JSON_OBJECT('key1' VALUE test_col2, 'key2' VALUE test_col3)
                )
            )
        )
    )
FROM
    test_tbl
WHERE
    test_col4 = 'val7'
GROUP BY
    test_col1

方案2:预去重原始数据(兼容低版本Oracle)

先通过子查询对需要聚合的字段去重,再执行后续的JSON生成逻辑:

SELECT
    JSON_OBJECT (
        'output' VALUE JSON_ARRAYAGG(
            JSON_OBJECT(
                'common' VALUE test_col1,
                'list' VALUE JSON_ARRAYAGG(
                    JSON_OBJECT('key1' VALUE test_col2, 'key2' VALUE test_col3)
                )
            )
        )
    )
FROM (
    SELECT DISTINCT test_col1, test_col2, test_col3
    FROM test_tbl
    WHERE test_col4 = 'val7'
) t
GROUP BY test_col1

两种方案执行后都可以得到你预期的去重后JSON结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:09:01