powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сложный json
4 сообщений из 4, страница 1 из 1
Сложный json
    #39405153
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В таблице machines есть столбец, в котором jsonb:
[
{"full": 359.219774658, "treshold": 5756.19828506, "remainder": 168834.50104302, "component_id": 886},
{"full": 2.3901343, "treshold": 7990331.24, "remainder": 36335.11568421, "component_id": 294}
]

Вопрос: какой запрос вернет такие же данные только с добавлением name из таблицы components (можно как text)?
[
{"full": 359.219774658, "treshold": 5756.19828506, "remainder": 168834.50104302, "component_id": 886, "name": "component_886_name"},
{"full": 2.3901343, "treshold": 7990331.24, "remainder": 36335.11568421, "component_id": 294, "name": "component_294_name"}
]
...
Рейтинг: 0 / 0
Сложный json
    #39405180
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так получается взять данные по component_id, но пока как скомпоновать я не осознал.
Код: plsql
1.
2.
3.
4.
SELECT name
FROM
(SELECT (a->'component_id')::text::int as id FROM machines m, json_array_elements(m.reminders::json) as a) as component_id
JOIN components c ON c.id = component_id.id
...
Рейтинг: 0 / 0
Сложный json
    #39405196
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так получается вывести для одного machine_id, но как сделать слияние

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT
    r.machine_id,
    json_build_array(
        json_build_object('full', r.full),
        json_build_object('treshold', r.treshold),
        json_build_object('remainder', r.remainder),
        json_build_object('component_id', r.component_id),
        json_build_object('component_name', c.name),
        json_build_object('component_measure', c.measure)
    )::jsonb
FROM
    (SELECT m.id as machine_id, (a->'component_id')::text::int as component_id,
     (a->'full')::text::double precision as full,
     (a->'treshold')::text::double precision as treshold,
     (a->'remainder')::text::double precision as remainder
     FROM machines m, json_array_elements(m.reminders::json) as a) as r
JOIN components c ON c.id = r.component_id



Получается (а надо чтобы было слияние для одного machine_id):

1;"[{"full": 359.219774658} {"treshold": 5756.19828506} {"remainder": 168834.50104302} {"component_id": 886} {"component_name": "name_quaerat"} {"component_measure": "measure_incidunt"}]"1;"[{"full": 2.3901343} {"treshold": 7990331.24} {"remainder": 36335.11568421} {"component_id": 294} {"component_name": "name_vel"} {"component_measure": "measure_doloremque"}]"1;"[{"full": 8314404.3240166} {"treshold": 0} {"remainder": 36701807.282} {"component_id": 877} {"component_name": "name_eveniet"} {"component_measure": "measure_eius"}]"
...
Рейтинг: 0 / 0
Сложный json
    #39405608
Andrew B.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так получилось.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT
    r.machine_id,
    json_agg(
        json_build_object('full', r.full,
        'treshold', r.treshold,
        'remainder', r.remainder,
        'component_id', r.component_id,
        'component_name', c.name,
        'component_measure', c.measure) )
FROM
    (SELECT m.id as machine_id, (a->'component_id')::text::int as component_id,
     (a->'full')::text::double precision as full,
     (a->'treshold')::text::double precision as treshold,
     (a->'remainder')::text::double precision as remainder
     FROM machines m, json_array_elements(m.reminders::json) as a) as r
JOIN components c ON c.id = r.component_id
GROUP BY machine_id
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сложный json
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]