Aqui está o exemplo:
drop table if exists tst;
create table tst (
num integer not null
);
insert into tst values (1), (2), (3);
-- window functions WITH order by clause
select *, max(num) over (partition by true order by num asc), array_agg(num) over (partition by true order by num asc) as test
from tst;
-- window functions WITHOUT order by clause
select *, max(num) over (partition by true), array_agg(num) over (partition by true) as test
from tst;
O resultado é o seguinte:
Por que a ordem por cláusula tem impacto na função de agregação?
Isso é esperado.
Uma função agregada usada como uma função de janela em conjunto com uma
order by
age como uma agregação "rolante", ou seja, considera apenas valores até as "linhas atuais" com base naorder by
expressão.Citação do manual
(ênfase minha)
Para uma explicação mais detalhada, veja esta resposta