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

Всем привет! Есть вот такой запрос SELECT *,

j ->> 'services' AS a,
j #>> '{services, 0, services}' AS b
FROM (VALUES(
'{"email": "vasya@pupkin.ru", "login": "vasya", "services": {"0": {"services": "Интернет"}, "1": {"services": "ТВ"}, "2": {"services": "Телефон"}}}'::jsonb
)) AS foo(j);
Подскажите пожалуйста как вытащить все услуги из jsonb? Если выбираю индекс 0-2 то получаю только одну услугу, а мне нужны все в одну строку.

15 ответов

21 просмотр

на вскидку такое придумалось with dt as ( SELECT j, json_extract_path(row_to_json(jsonb_each(jsonb_extract_path(j, 'services'))), 'value', 'services') j1 FROM (VALUES( '{"email": "vasya@pupkin.ru", "login": "vasya", "services": {"0": {"services": "Интернет"}, "1": {"services": "ТВ"}, "2": {"services": "Телефон"}}}'::jsonb )) AS foo(j) group by j ) select j, array_agg(j1) from dt group by j;

Kirill- Автор вопроса

версия пг позволяет jsonpath использовать?

Kirill
не уверен, pg 9.6

тогда мимо для такой старой версии странный выбор использовать json

Kirill- Автор вопроса
Владимир
тогда мимо для такой старой версии странный выбор ...

хотя вру, несколько серверов есть, в т. ч. с 12.6

Kirill
хотя вру, несколько серверов есть, в т. ч. с 12.6

тогда jsonpath вам в помощь, там все быстро и гибко решается

Kirill- Автор вопроса
Владимир
тогда jsonpath вам в помощь, там все быстро и гибк...

вы можете подсказать как будет выглядеть решение с помощью указанной функции?

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

что то вроде SELECT jsonb_path_query(js,'$.services[*]') FROM (VALUES( '{"email": "vasya@pupkin.ru", "login": "vasya", "services": {"0": {"services": "Интернет"}, "1": {"services": "ТВ"}, "2": {"services": "Телефон"}}}'::jsonb )) AS tbl(js) result {"0":{"services":"Интернет"},"1":{"services":"ТВ"},"2":{"services":"Телефон"}}

Kirill- Автор вопроса
Kirill
а можно вытащить только services?

напишите какой результат вы ожидаете, моя телепатическая батарейка разрядилась

Kirill- Автор вопроса
Владимир
напишите какой результат вы ожидаете, моя телепати...

Простите, результат "Интернет, ТВ, Телефон"

Kirill
Простите, результат "Интернет, ТВ, Телефон"

SELECT jsonb_path_query(js,'$.services[*].*.services') FROM (VALUES( '{"email": "vasya@pupkin.ru", "login": "vasya", "services": {"0": {"services": "Интернет"}, "1": {"services": "ТВ"}, "2": {"services": "Телефон"}}}'::jsonb )) AS tbl(js) result Интернет ТВ Телефон

Kirill- Автор вопроса
Владимир
SELECT jsonb_path_query(js,'$.services[*].*.servic...

О, на будущее буду знать, мы еще на 12+ не переехали

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
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
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта