以下两个陈述给出两个不同的结果
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
您无法通过ORDER BY
中的位置访问分析(窗口)功能的列名。
[order by 1
”表示“ 将结果除以数值1
”,因此将其按常量而不是列的值进行排序。
与order by 'foobar'
或order by 99999
基本相同
来自"About SQL Functions" - "Analytic Functions" - "order_by_clause":
对ORDER BY子句的限制
以下限制适用于
ORDER BY
子句:
- (...)位置(
position
)和列别名(c_alias
)也无效。 (...)
因此,在ORDER BY
子句的OVER
中不能使用列位置。因此,将其简单地视为整数文字。并且由于所有行的文字均相同,因此没有定义的顺序。
只需使用列名。不管怎样,它都更加清晰-也适用ODER BY
的SELECT
子句,并且如果列的顺序更改了,它也不会中断。