拆分文本字符串,并使其成为Postgres中的汇总列表

问题描述

我的Postgresql表中有2列,如下所示,即客户ID标签值。我想获取所有用逗号分隔的标签名称值。我该怎么做。

输入

Customer_ID_343        [{"tagId": "W","name": "ds_initialsegment04","href": "https://api3.getresponse360.pl/v3/tags/W","color": ""},{"tagId": "I","name": "rea","href": "https://api3.getresponse360.pl/v3/tags/I",{"tagId": "c","name": "rea_gen0220_7mbis10m","href": "https://api3.getresponse360.pl/v3/tags/c",{"tagId": "o","name": "rea_20200220_gen","href": "https://api3.getresponse360.pl/v3/tags/o",{"tagId": "5","name": "no_wholesale_order_greater_0","href": "https://api3.getresponse360.pl/v3/tags/5",{"tagId": "B","name": "H0710gen","href": "https://api3.getresponse360.pl/v3/tags/B","color": ""}]

预期产量

Customer_ID_343  ds_initialsegment04,rea,rea_gen0220_7mbis10m,rea_20200220_gen,no_wholesale_order_greater_0,H0710gen

解决方法

您似乎拥有json数据。如果是这样,则可以使用json[b]_array_elements()取消嵌套数组元素,然后使用字符串聚合。横向联接很容易处理逻辑:

select t.customer_id,x.names
from mytable t
cross join lateral (
    select string_agg(x.obj ->> 'name',',') as names
    from jsonb_array_elements(t.tags) as x(obj)
) x