Оконная функция без ORDER BY - PullRequest
       13

Оконная функция без ORDER BY

0 голосов
/ 19 сентября 2018

В предложении OVER () есть оконная функция без ORDER BY.Есть ли гарантия, что строки будут обработаны в порядке, указанном выражением ORDER BY в самом SELECT?

Например:

SELECT tt.*
     , row_number() OVER (PARTITION BY tt."group") AS npp --without ORDER BY
FROM
  (
   SELECT SUBSTRING(random() :: text, 3, 1) AS "group"
        , random() :: text          AS "data"
   FROM generate_series(1, 100) t(ser)
   ORDER BY "group", "data"
  ) tt
ORDER BY tt."group", npp;

В этом примере подзапрос возвращает data отсортировано в порядке возрастания в каждой группе.Функция окна обрабатывает строки в одном и том же порядке, поэтому номера строк идут в порядке возрастания data.Могу ли я на это положиться?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

если вы используете order by в вашем over ()

row_number() OVER (PARTITION BY tt."group" ORDER BY tt."group")

, вы должны получить нужный вам заказ.

0 голосов
/ 19 сентября 2018

Хороший вопрос!

Нет, на это нельзя полагаться.

Оконные функции обрабатываются до предложения ORDER BY запроса и без ORDER BYв определении окна строки будут обрабатываться в том порядке, в каком они происходят из подвыбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...