Postgresql

如果我已經有正確排序的查詢,我是否需要在視窗中使用 ORDER BY?

  • March 7, 2017

在這個查詢中..

SELECT *
FROM foo
ORDER BY x;

視窗函式是否foo需要特定的ORDER BY子句或者視窗是否共享查詢的順序?

受@Erwin 啟發的問題,以及@Ypercube 對我自己的回答的評論

是的

您實際上可以在不查看規範的情況下看到這一點。

CREATE TABLE foo AS
 SELECT trunc(random()*10) AS x
 FROM generate_series(1,100);

SELECT row_number() OVER (), x
FROM foo
ORDER BY x;

row_number | x 
------------+---
        95 | 0
        93 | 0
        75 | 0
        74 | 0
        21 | 0
        55 | 0
        97 | 0
        54 | 0
        26 | 0
         5 | 0

與有序分區上的視窗函式相比

SELECT row_number() OVER (ORDER BY x), x
FROM foo;

row_number | x 
------------+---
         1 | 0
         2 | 0
         3 | 0
         4 | 0
         5 | 0
         6 | 0

引用自:https://dba.stackexchange.com/questions/166419