Size: a a a

DBA - русскоговорящее сообщество

2021 February 17

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Adv0cat
Само слово село 😐
Это район города так называется
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Adv0cat
3 года опыта это уже не студент 😅
Три года опыта запросто у студента может быть
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Так давайте прикроем тему...
источник

A

Anton in DBA - русскоговорящее сообщество
Кто знает в каком порядке  в Postgresql сортируется  агрегация в окне [string_agg() over()]?
Явная сортировка не поддерживается, но можно ли опираться на то, что неявная будет оставаться постоянной без изменения запроса?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Anton
Кто знает в каком порядке  в Postgresql сортируется  агрегация в окне [string_agg() over()]?
Явная сортировка не поддерживается, но можно ли опираться на то, что неявная будет оставаться постоянной без изменения запроса?
Покажи запрос...
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Anton
Кто знает в каком порядке  в Postgresql сортируется  агрегация в окне [string_agg() over()]?
Явная сортировка не поддерживается, но можно ли опираться на то, что неявная будет оставаться постоянной без изменения запроса?
Хотя... Можно проще.

Order by есть у тебя в запросе?
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Anton
Кто знает в каком порядке  в Postgresql сортируется  агрегация в окне [string_agg() over()]?
Явная сортировка не поддерживается, но можно ли опираться на то, что неявная будет оставаться постоянной без изменения запроса?
Если ты имеешь в виду в каком порядке производится агрегация оконной функцией, то этот порядок не имеет значения
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Anton
Кто знает в каком порядке  в Postgresql сортируется  агрегация в окне [string_agg() over()]?
Явная сортировка не поддерживается, но можно ли опираться на то, что неявная будет оставаться постоянной без изменения запроса?
В произвольном, конечно.

> Явная сортировка не поддерживается

И почему это "не поддерживается"? Вы её в OVER() указывайте.

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

И нет, нельзя.
источник

A

Anton in DBA - русскоговорящее сообщество
Ilia Zviagin
Покажи запрос...
Запрос трехстраничный, переделать этото место на group by не вариант, сильно усложняет.

По сути запрос выдает записи с самым высоким рангом и все варианты склеивает в строку.
Это место в одной из вьюх with. Запрос по двум похожим окнам - одно окно с сортировкой для first, второе окно доя string_agg, без сортировки, чтобы бралось все окно. В том же запросе  делается distinct по всем полям.
В запосе ниже, использующем эту вьюху with, есть сортировка.
источник

A

Anton in DBA - русскоговорящее сообщество
Yaroslav Schekin
В произвольном, конечно.

> Явная сортировка не поддерживается

И почему это "не поддерживается"? Вы её в OVER() указывайте.

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

И нет, нельзя.
Спасибо.
Если сортировку для string_agg указать в over, по умолчанию будет нарастающая склейка, а мне нужны все записи окна в каждой строке. Правде не пробовал с разными настройками границ окна поиграться, может получится.
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Anton
Запрос трехстраничный, переделать этото место на group by не вариант, сильно усложняет.

По сути запрос выдает записи с самым высоким рангом и все варианты склеивает в строку.
Это место в одной из вьюх with. Запрос по двум похожим окнам - одно окно с сортировкой для first, второе окно доя string_agg, без сортировки, чтобы бралось все окно. В том же запросе  делается distinct по всем полям.
В запосе ниже, использующем эту вьюху with, есть сортировка.
>  второе окно доя string_agg, без сортировки, чтобы бралось все окно.

Ну так сделайте с сортировкой, но берите всё окно, да и всё.
источник

A

Anton in DBA - русскоговорящее сообщество
Yaroslav Schekin
>  второе окно доя string_agg, без сортировки, чтобы бралось все окно.

Ну так сделайте с сортировкой, но берите всё окно, да и всё.
Бцлет арастающая склейка, писал выше. Спасибо
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Yaroslav Schekin
>  второе окно доя string_agg, без сортировки, чтобы бралось все окно.

Ну так сделайте с сортировкой, но берите всё окно, да и всё.
А что делает string_agg() ?
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Anton
Спасибо.
Если сортировку для string_agg указать в over, по умолчанию будет нарастающая склейка, а мне нужны все записи окна в каждой строке. Правде не пробовал с разными настройками границ окна поиграться, может получится.
Вам неплохо бы улучшить своё понимание того, как работают window functions (не обижайтесь). ;)

> Бцлет арастающая склейка, писал выше. Спасибо

Не будет:
WITH t(n, x) AS (
VALUES (1, '2'), (4, '1'), (2, '8')
)
SELECT n, x, string_agg(x, ',') OVER (ORDER BY n DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
 FROM t;
источник

A

Anton in DBA - русскоговорящее сообщество
Ilia Zviagin
А что делает string_agg() ?
Собирает все варианты, хочется, чтобы они были в порядке ранга. Они так и есть, но не знаю насколько это поведение детерминировано.
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Anton
Собирает все варианты, хочется, чтобы они были в порядке ранга. Они так и есть, но не знаю насколько это поведение детерминировано.
Куда собирает варианты чего?
источник

YS

Yaroslav Schekin in DBA - русскоговорящее сообщество
Ilia Zviagin
Куда собирает варианты чего?
Из https://www.postgresql.org/docs/current/functions-aggregate.html :
string_agg ( value text, delimiter text ) → text
Concatenates the non-null input values into a string. Each value after the first is preceded by the corresponding delimiter (if it's not null).
источник

A

Anton in DBA - русскоговорящее сообщество
Yaroslav Schekin
Вам неплохо бы улучшить своё понимание того, как работают window functions (не обижайтесь). ;)

> Бцлет арастающая склейка, писал выше. Спасибо

Не будет:
WITH t(n, x) AS (
VALUES (1, '2'), (4, '1'), (2, '8')
)
SELECT n, x, string_agg(x, ',') OVER (ORDER BY n DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
 FROM t;
Я в string_agg собиоаю в т.ч. и 'n'. Видимо поэтому нарастающая кюсклейка.
источник

IZ

Ilia Zviagin in DBA - русскоговорящее сообщество
Anton
Собирает все варианты, хочется, чтобы они были в порядке ранга. Они так и есть, но не знаю насколько это поведение детерминировано.
Так это уже ахтунг суровый, если все так как Ярослав говорит
источник

A

Anton in DBA - русскоговорящее сообщество
Ilia Zviagin
Куда собирает варианты чего?
Я тут писал суть запроса https://t.me/dba_ru/131062
источник