172 похожих чатов

Чет туплю. Как мне из '[[], [1, 2], [3]]'::jsonb Получить '{1, 2, 3}'::jsonb[]

?
pg 13

Т.е. я хочу сделать flatten jsonb array и его в array of jsonb scalars

Исходный массив у меня всегда гарантированно двойной вложенности

11 ответов

8 просмотров

не уверен на счёт правильности решения, но возможно натолкнёт на решение: with tr_data as ( select '[[], [1, 2], [3]]'::jsonb as mm ), unn1 as ( select jsonb_array_elements(jsonb_array_elements(mm)) as n from tr_data a) select array_agg(n)::jsonb[] from unn1;

2lb3oz4dr10½grOfHedgehogs- Автор вопроса
2lb3oz4dr10½grOfHedgehogs- Автор вопроса
Артур Асриян
не уверен на счёт правильности решения, но возможн...

Вот так добился желаемого результата, но очень смущает cross join with my_jsonb_table as ( select unnest(array['[[], [1, 2], [3]]'::jsonb, '[[4, 5], [6], []]'::jsonb]) as val ) select (select array_agg(values) from jsonb_array_elements(my_jsonb_table.val) as elements cross join jsonb_array_elements(elements) as values) from my_jsonb_table; array_agg ----------- {1,2,3} {4,5,6} (2 rows)

2lb3oz4dr10½grOfHedgehogs
Вот так добился желаемого результата, но очень сму...

можно вот так с row_number и без джоина. with tr_data as ( select unnest(array['[[], [1, 2], [3]]'::jsonb, '[[4,5],[6],[]]'::jsonb]) as mm ), unn1 as ( select jsonb_array_elements(mm) as n, row_number() over() vv from tr_data a), unn2 as ( select jsonb_array_elements(n) as n, vv from unn1 a) select vv, array_agg(n)::jsonb[] from unn2 group by vv; vv | array_agg ----+----------- 2 | {4,5,6} 1 | {1,2,3}

2lb3oz4dr10½grOfHedgehogs- Автор вопроса
2lb3oz4dr10½grOfHedgehogs
А что лучше group by или cross join?...

а твой пример с кросс джоином с тремя записями норм сработает?

ну я хз что лучше. в sql всегда есть множество разных способов решить задачу. если интересует скорость то лучше всего покажут замеры.

2lb3oz4dr10½grOfHedgehogs- Автор вопроса
Артур Асриян
ну я хз что лучше. в sql всегда есть множество раз...

Ну сейчас меня скорость не удовлетворила. Попытаюсьсделать и через group by

2lb3oz4dr10½grOfHedgehogs
Вот так добился желаемого результата, но очень сму...

Раз уж v13, то почему бы не: WITH my_jsonb_table AS ( SELECT unnest(ARRAY['[[], [1, 2], [3]]'::jsonb, '[[4, 5], [6], []]'::jsonb]) AS val ) SELECT val, jsonb_path_query_array(val, '$[*][*]') FROM my_jsonb_table;

2lb3oz4dr10½grOfHedgehogs- Автор вопроса
Yaroslav Schekin
Раз уж v13, то почему бы не: WITH my_jsonb_table A...

ВОУ! Это самое лучшее решение для меня

Похожие вопросы

Обсуждают сегодня

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта