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

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

?
pg 13

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

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

11 ответов

16 просмотров

не уверен на счёт правильности решения, но возможно натолкнёт на решение: 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...

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта