【问题标题】:Split Text string and make it a aggregated list in Postgres拆分文本字符串并使其成为 Postgres 中的聚合列表
【发布时间】:2021-02-02 15:44:54
【问题描述】:

我的 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", "color": ""}
    , {"tagId": "c", "name": "rea_gen0220_7mbis10m", "href": "https://api3.getresponse360.pl/v3/tags/c", "color": ""}
    , {"tagId": "o", "name": "rea_20200220_gen", "href": "https://api3.getresponse360.pl/v3/tags/o", "color": ""}
    , {"tagId": "5", "name": "no_wholesale_order_greater_0", "href": "https://api3.getresponse360.pl/v3/tags/5", "color": ""}
    , {"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

【问题讨论】:

    标签: sql arrays json postgresql unnest


    【解决方案1】:

    看起来你有 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
    

    【讨论】:

    • 错误:“名称”处或附近的语法错误第 6 行:选择 string_agg( x.obj ->> 'name', ',') 名称
    • 我遇到了错误,我不太习惯这个。让我检查一下。
    • 有什么建议吗?
    • @Linu:我认为您只需要介于两者之间的as。看我的更新。这适用于这个 db fiddlde:dbfiddle.uk/…
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2016-03-23
    • 2019-04-16
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多