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

Snowflake中Group By分组后如何将结果合并为JSON数组

按ID分组生成JSON数组解决方案

原表(table-1)

idvalue-1value-2
id-1test{"id": "value","other": "this"}
id-2foo-1{"id": "value","other": "this"}
id-2foo-2{"id": "value1","other": "this"}

期望输出

idjson_value
id-1[{"value-1": "test","value-2": {"id": "value","other": "this"}}]
id-2[{"value-1":"foo-1","value-2":{"id":"value","other":"this"}},{"value-1":"foo-2","value-2":{"id":"value1","other":"this"}}]

各主流数据库实现代码

PostgreSQL

利用json_build_object构造单行JSON对象,json_agg聚合为数组:

SELECT
    id,
    json_agg(
        json_build_object(
            'value-1', value_1,
            'value-2', value_2::json
        )
    ) AS json_value
FROM table_1
GROUP BY id;

注:如果value-2字段本身是JSON类型,去掉::json转换即可。

MySQL

用JSON_OBJECT生成单行JSON,JSON_ARRAYAGG直接聚合为JSON数组:

SELECT
    id,
    JSON_ARRAYAGG(
        JSON_OBJECT(
            'value-1', value_1,
            'value-2', value_2
        )
    ) AS json_value
FROM table_1
GROUP BY id;

注:若value-2是字符串类型且存储的是合法JSON,MySQL会自动识别;如果是普通字符串,需用JSON_QUOTE()包裹。

SQL Server

通过子查询生成单行JSON对象,再用STRING_AGG拼接成数组格式:

SELECT
    id,
    CONCAT('[', STRING_AGG(json_row, ','), ']') AS json_value
FROM (
    SELECT
        id,
        (SELECT value_1, value_2 FOR JSON PATH, WITHOUT_ARRAY_WRAPPER) AS json_row
    FROM table_1
) t
GROUP BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:25:16