OVER ()
子句中有一个没有ORDER BY
的窗口函数。是否保证行将按照 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;
在此示例中,子查询返回在每个组中按升序排序的数据
。窗口函数以相同的顺序处理行,因此行号按 data
的升序排列。我可以依靠它吗?
最佳答案
好问题!
不,你不能依赖它。
窗口函数在查询的 ORDER BY
子句之前处理,如果窗口定义中没有 ORDER BY
,行将被处理按照它们恰好来自子选择的顺序。
关于postgresql - 没有 ORDER BY 的窗口函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401207/