我的书说——
1-排名函数(如 RANK()、DENSE_RANK()、ROW_NUMBER() 等)需要 OVER() 子句。
所以,下面的代码是错误的 -
select *, RANK()
from [grant]
order by Amount desc
错误 - 'RANK' 附近的语法不正确,应为 'OVER'。
如果我在上面的代码中在 RANK() 之后添加 OVER(),我会再次收到错误。(错误 - 排名函数“RANK”必须有 ORDER BY 子句。)
2-然后,我的书补充说“排名函数需要 ORDER BY 信息作为参数出现在 OVER() 中”。
select *, RANK() OVER(ORDER BY Amount DESC) as GrantRank
from [grant]
我的问题是——
1 -为什么我们需要一个带有排名函数的 OVER() 子句? 2 -为什么我们必须删除 order by 语句并将其放在 OVER() 中?
这本书没有解释这些事情背后的逻辑!请帮助我理解它。
提前致谢。