В предложении 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
.Могу ли я на это положиться?