powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / jsonb_agg with distinct on
3 сообщений из 3, страница 1 из 1
jsonb_agg with distinct on
    #40052712
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Такой запрос работает и возвращает данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT jsonb_agg(val) from
(
SELECT to_jsonb(sss.idm)||to_jsonb(sss.pu)||to_jsonb(sss.usr) FROM
(
SELECT distinct on (p.nus, t.nto) m.idm, p.usr as pu, k.usr
	                FROM public.mal m
                    INNER JOIN public.aus p ON m.fko = p.fki
	                INNER JOIN public.aus k ON m.fkk = k.fki
                    INNER JOIN public.ato t ON m.fkt = t.nto

WHERE fko = 51 AND k.fki = 130 OR p.fki = 130 AND fkk = 51 
ORDER BY p.nus, t.nto DESC
) as sss 
order by idm ASC
) as x(val)
;



[
[
42361,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km"
],
[
42362,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km"
],
[
54999,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2"
],
[
55000,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2"
]
]

а как получить эти данные без вложений, вот так:

[
42361,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km",


42362,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km",


54999,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2",


55000,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2"
]


причём сохранить последовательность: 42361 .. .. 55000
Спасибо.
...
Рейтинг: 0 / 0
jsonb_agg with distinct on
    #40052715
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Wong,

например, так получаю криво:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT jsonb_agg(sss.idm||','||sss.pu||','||sss.usr order by idm ASC) FROM
(
SELECT distinct on (p.nus, t.nto) m.idm, p.usr as pu, k.usr
	                FROM public.mal m
                    INNER JOIN public.aus p ON m.fko = p.fki
	                INNER JOIN public.aus k ON m.fkk = k.fki
                    INNER JOIN public.ato t ON m.fkt = t.nto

WHERE fko = 51 AND k.fki = 130 OR p.fki = 130 AND fkk = 51 
ORDER BY p.nus, t.nto DESC
) as sss
;



[
"42361, user-id130-la4ek9bas9b2, user-id51-t9ypcybm83km",
"42362, user-id130-la4ek9bas9b2, user-id51-t9ypcybm83km",
"54999, user-id51-t9ypcybm83km, user-id130-la4ek9bas9b2",
"55000, user-id51-t9ypcybm83km, user-id130-la4ek9bas9b2"
]
...
Рейтинг: 0 / 0
jsonb_agg with distinct on
    #40052856
Alex_Wong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Wong,

такой вариант запроса:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with step1 as 
(
SELECT 
  --distinct on (p.nus, t.nto) 
  jsonb_array_elements(jsonb_array_elements(jsonb_agg(
  to_jsonb(m.idm)||to_jsonb(p.usr)||to_jsonb(k.usr)))) as item
  FROM public.mal m
  INNER JOIN public.aus p ON m.fko = p.fki
  INNER JOIN public.aus k ON m.fkk = k.fki
  INNER JOIN public.ato t ON m.fkt = t.nto

  WHERE fko = 51 AND k.fki = 130 OR p.fki = 130 AND fkk = 51
  --order by p.nus, t.nto DESC
) 

select jsonb_agg(item)
  from step1
;



[
42361,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km",

42362,
"user-id130-la4ek9bas9b2",
"user-id51-t9ypcybm83km",

54999,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2",

55000,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2",

54999,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2",

54999,
"user-id51-t9ypcybm83km",
"user-id130-la4ek9bas9b2"
]


по структуре возвращаемых данных, - как надо,
но не смог прикрутить
distinct on
order by p.nus, t.nto DESC
поэтому получаю лишние данные ...

Как правильно делать для большой таблицы,
чтобы ускориться и вынуть данные
без повторений?
спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / jsonb_agg with distinct on
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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