【发布时间】:2020-12-07 14:10:31
【问题描述】:
我想更好地理解窗口函数的含义。定义说:
窗口函数对与当前行有某种关联的一组表行(窗口)执行计算
让我们考虑ROW_NUMBER()(同样适用于RANK() 或DENSE_RANK())。该函数只是为一组有序的行分配一个数字。这似乎不符合上述定义:它不是对与当前行有某种关联的一组表行进行计算,而是对所有结果行进行计算。
谁能解释一下?
【问题讨论】:
-
窗口函数是使用
over关键字的任何函数。因此,row_number()是一个窗口函数。 -
这似乎是您引用的 Postgres 文档,但您已标记 sql-server
-
您只使用
ORDER BY子句吗?你有没有注意到PARTITION BY选项? -
在 SQL-Server 中,您所指的窗口函数的子集称为 ranking function,由于它们“为分区中的每一行”返回一个值,因此它们也是窗口函数。
-
为什么“窗口”不能是“整张桌子”? (另请注意,
ROW_NUMBER()并不经常在整个表格中使用。它可以是并不意味着它不是窗口函数。)
标签: sql sql-server window-functions