Преобразование массива Postgres JSONB в список через запятую в одном столбце - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть столбец JSONB в таблице, который я хотел бы представить в виде списка через запятую в одном столбце. Я пробовал миллион разных подходов, и у меня не получится. В документации Postgres я не могу найти ничего, что касалось бы этой конкретной ситуации, поэтому надеюсь на некоторую помощь!

Данная таблица выглядит примерно так:

date       | order_id | sales_reps
2019-12-01 | 1234     | [{"id": 100, "user": "Jane Doe"}, {"id": 101, "user": "John Doe"}]

Я быхотел бы сделать это как:

date       | order_id | sales_reps
2019-12-01 | 1234     | Jane Doe, John Doe

Я могу сравниться с:

select
    date,
    order_id, 
    (select jsonb_agg(t -> 'user') from jsonb_array_elements(sales_reps::jsonb) as x(t)) as sales_reps
from table
date       | order_id | sales_reps
2019-12-01 | 1234     | ["Jane Doe", "John Doe"]

Но, судя по всему, я не могу получитьвывод, который я хочу - перепробовал тонну агрегаторов и функций jsonb безрезультатно.

1 Ответ

1 голос
/ 11 декабря 2019

Используйте оператор ->> для получения значений json в виде текста и совокупность string_agg():

select
    date,
    order_id,
    (
        select string_agg(t->>'user', ',') 
        from jsonb_array_elements(sales_reps::jsonb) as x(t)
    ) as sales_reps
from my_table

Db <> fiddle.

...