ROW_NUMBER() 是否支持 OVER(ORDER BY 1)?

0 sql oracle row-number

下面 2 个语句给出 2 个不同的结果

SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
  FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud)
SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
  FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud)
EID  NAME   ROW_NUM
2    Ram       1
1    Siva      2
3    Deva      3
Run Code Online (Sandbox Code Playgroud)
SELECT t.EID, t.name,ROW_NUMBER() OVER(ORDER BY t.EID) AS ROW_NUM
  FROM ESWAR t
;
Run Code Online (Sandbox Code Playgroud)

sti*_*bit 5

“关于 SQL 函数”-“分析函数”-“order_by_clause”

ORDER BY 条款的限制

以下限制适用于该ORDER BY条款:

  • (...) 位置 ( position) 和列别名 ( c_alias) 也无效。(……)

所以不,不能在ORDER BYofOVER子句中使用列位置。因此,它被简单地视为整数文字。由于所有行的文字都相同,因此没有定义的顺序。

只需使用列名即可。无论如何它更清楚——这也适用于加号的ORDER BY子句SELECT,如果列的顺序改变,它不会中断。