问题描述
我的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