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

Кто знает в каком порядке в Postgresql сортируется

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

25 ответов

13 просмотров

Покажи запрос...

Хотя... Можно проще. Order by есть у тебя в запросе?

Если ты имеешь в виду в каком порядке производится агрегация оконной функцией, то этот порядок не имеет значения

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

Anton- Автор вопроса
Ilya Zviagin
Покажи запрос...

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

Anton- Автор вопроса
Yaroslav Schekin
В произвольном, конечно. > Явная сортировка не по...

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

Anton
Запрос трехстраничный, переделать этото место на g...

> второе окно доя string_agg, без сортировки, чтобы бралось все окно. Ну так сделайте с сортировкой, но берите всё окно, да и всё.

Anton- Автор вопроса
Yaroslav Schekin
> второе окно доя string_agg, без сортировки, что...

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

Anton
Спасибо. Если сортировку для string_agg указать в ...

Вам неплохо бы улучшить своё понимание того, как работают 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;

Anton- Автор вопроса
Ilya Zviagin
А что делает string_agg() ?

Собирает все варианты, хочется, чтобы они были в порядке ранга. Они так и есть, но не знаю насколько это поведение детерминировано.

Ilya 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).

Anton- Автор вопроса
Yaroslav Schekin
Вам неплохо бы улучшить своё понимание того, как р...

Я в string_agg собиоаю в т.ч. и 'n'. Видимо поэтому нарастающая кюсклейка.

Anton
Собирает все варианты, хочется, чтобы они были в п...

Так это уже ахтунг суровый, если все так как Ярослав говорит

Anton- Автор вопроса
Ilya Zviagin
Куда собирает варианты чего?

Я тут писал суть запроса https://t.me/dba_ru/131062

Anton
Я в string_agg собиоаю в т.ч. и 'n'. Видимо поэтом...

Нет, не поэтому. И я Вам уже написал, как это решать, нет?

Anton
Запрос трехстраничный, переделать этото место на g...

Вот это вот "все варианты склеивает в строку" - это ахтунг, так нельзя делать

Anton- Автор вопроса
Yaroslav Schekin
Нет, не поэтому. И я Вам уже написал, как это реш...

Прямо сейчас не могу проверить, поэтому предполагаю, возможно неверно. У меня точно ьыоюламнарастаюшая если брать то же окно, что и для first_value(). Но спасибо в любом случае.

Anton- Автор вопроса
Ilya Zviagin
Ты потом это обрабатывать не сможешь

Так точно. Это далее обрабатывается не системно, а руками, проверкой вариантов с низким рангом. Причем на выходе денормализацию со всеми вариантами не хотят, хотят Excel. Такая странная задача, поэтому и запрос такой. Всего записей меньше 300 тыс, для ручной сверки остается не больше 5%.

Anton
Прямо сейчас не могу проверить, поэтому предполага...

Естественно, потому что framing option по умолчанию — RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, а без ORDER BY это значит, что в frame входят все записи окна, потому что все они — peers текущей записи (а режим RANGE значит, что frame начинается с первого peer текущей записи, а заканчивается последним её peer). И это основы [понимания] оконных функций, мне кажется. ;)

Anton- Автор вопроса
Yaroslav Schekin
Естественно, потому что framing option по умолчани...

Да хорошо, уел, пусть я бестолковая белка ;)

Anton
Да хорошо, уел, пусть я бестолковая белка ;)

При чём тут это? ;) Просто стоит освоить, если уж пользуетесь, IMNSHO. Кстати про "не могу проверить": https://dbfiddle.uk/?rdbms=postgres_13&fiddle=5dc2c21e3ae7117e69ad316cc98c3844

Anton- Автор вопроса
Yaroslav Schekin
При чём тут это? ;) Просто стоит освоить, если уж ...

Не всё запоминается с первого раза, тем более по редким задачвм. Вот теперь, благодаря вам запомнил на всю жизнь)) Сам мой вопрос был некорректен, потому что начал думать не в ту сторону и вы правы, что практического понимания пользы range у меня мало, но не правы, что документация его добавляет. Всё работает как хотелось, спасибо))

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
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
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Карта сайта