首页 > 解决方案 > 如何在 Postgres 中连接 JArray 元素?

问题描述

我有列的表:id(pk)和tasks(js​​on),例如[{ "name": "xxx"}, ..]

我怎样才能得到这样的结果:id,..,“xxx,...”,如何从tasks列中的 Json 数组中连接?

标签: jsonpostgresql

解决方案


源数据(表)如下所示:

Id ...tasks

1 ... [{"name": "abc",...},{"name: "abd", ...}, ...]

我想查询: 1..."abc, abd, ..."

我想出了以下方法:

with tmp_data(id, val) as (values (1, '[{ "name": "abc", "col": false }, { "name": "abc", "col": true }]'::json),  (2, '[{"name": "123", "col": true}, {"name": "ghg", "col": true }]'::json)),
    tmp_data_elements(id, elem) as (select id, json_array_elements(val) from tmp_data)
select x.id, string_agg(x.elem::varchar, ', ') as concated
from (select  id, elem->'name' as elem from tmp_data_elements ) x
GROUP BY 1

推荐阅读