Postgresql 窗口函数,无需按顺序

Postgresql 窗口函数,无需按顺序,postgresql,Postgresql,在OVER()子句中有一个不带orderby的窗口函数。是否保证将按照SELECT自身中的order by表达式指定的顺序处理行 例如: 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

OVER()
子句中有一个不带
orderby
的窗口函数。是否保证将按照SELECT自身中的
order by
表达式指定的顺序处理行

例如:

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;
在本例中,子查询返回各组中按升序排序的
数据。window函数以相同的顺序处理行,因此行号按数据的升序排列。我能相信这个吗?

好问题

不,你不能相信


窗口函数在查询的
ORDER BY子句之前处理,如果窗口定义中没有ORDER BY,则行将按照它们恰好来自子选择的顺序进行处理。

如果在
over()中使用
ORDER BY

row_number()(按tt分区。“组”按tt排序。“组”)

你应该得到你想要的订单。

简短的回答是“否”。