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

问题描述 投票:0回答:2

以下两个陈述给出两个不同的结果

SELECT t.EID,t.name, ROW_NUMBER() OVER(ORDER BY 1) AS ROW_NUM
  FROM ESWAR t
;
EID  NAME   ROW_NUM
2    Ram       1
1    Siva      2
3    Deva      3
SELECT t.EID, t.name,ROW_NUMBER() OVER(ORDER BY t.EID) AS ROW_NUM
  FROM ESWAR t
;
EID NAME    ROW_NUM
1   Siva       1
2   Ram    2
3   Deva       3
sql oracle row-number
2个回答
0
投票

您无法通过ORDER BY中的位置访问分析(窗口)功能的列名。

[order by 1”表示“ 将结果除以数值1”,因此将其按常量而不是列的值进行排序。

order by 'foobar'order by 99999基本相同


0
投票

来自"About SQL Functions" - "Analytic Functions" - "order_by_clause"

对ORDER BY子句的限制

以下限制适用于ORDER BY子句:

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

因此,在ORDER BY子句的OVER中不能使用列位置。因此,将其简单地视为整数文字。并且由于所有行的文字均相同,因此没有定义的顺序。

只需使用列名。不管怎样,它都更加清晰-也适用ODER BYSELECT子句,并且如果列的顺序更改了,它也不会中断。

© www.soinside.com 2019 - 2024. All rights reserved.