如何在PieCloudDB中按id聚合JSON列数据
解决方案
你只需要在现有查询基础上,通过GROUP BY分组,并使用string_agg函数将同一id下的字段值拼接为逗号分隔的字符串即可,若要保证拼接顺序和原JSON数组一致,可在聚合函数内指定排序规则:
SELECT json_col->>'id' AS id, string_agg(json_data.col1, ',' ORDER BY json_data.col1) AS col1, string_agg(json_data.col2, ',' ORDER BY json_data.col2) AS col2, string_agg(json_data.col3, ',' ORDER BY json_data.col3) AS col3 FROM c, json_to_recordset(json_col->'data') AS json_data(col1 text, col2 text, col3 text) GROUP BY json_col->>'id' ORDER BY id;
关键说明
string_agg(字段名, 分隔符)是PieCloudDB(兼容PostgreSQL)的字符串聚合函数,可将分组内的指定字段值用指定分隔符拼接成单个字符串。- 聚合函数内的
ORDER BY子句,能确保拼接后的字符串顺序和原JSON数组中的元素顺序匹配(你的示例场景中按字段值排序即可得到目标顺序)。 GROUP BY json_col->>'id'用于按id分组,最终输出每个id对应的聚合结果。
执行上述SQL后,将得到你需要的结果:
| id | col1 | col2 | col3 |
|---|---|---|---|
| 1 | A,D | B,E | C,F |
| 2 | G,J | H,K | I,L |
内容的提问来源于stack exchange,提问作者Meliodas Dragon
相关产品推荐
相关产品推荐

