SQL中的窗口函数:为什么称为窗口函数?

Dav*_*vid 8 sql t-sql sql-server

我了解窗口函数,但不明白为什么它们被称为窗口函数。当我们说“窗口”时,它既是分区子句,又是 ​​order by 子句吗?

Ven*_*n R 9

窗口函数对由 OVER 子句定义的一系列行进行操作。就像你透过窗户看,你看到天空、星星、月亮。你看不到整个天空,你看到的是天空的一部分。

\n

window Function我在简单的谈话网站中发现了这个美丽的定义。为了更清楚起见,我在下面复制了。

\n

有关窗口函数的 Simple-talk 的原始文章

\n
\n

窗口(也称为加窗或加窗)函数对一组行执行\n计算。我喜欢认为 \xe2\x80\x9c 透过窗口 \xe2\x80\x9d 查看正在返回的行,并有最后一次执行计算的机会。该窗口由 OVER 子句定义,该子句确定行是否被划分为较小的集合以及它们是否已排序。事实上,如果您使用窗口函数,您将始终使用\nan OVER 子句。OVER 子句也是序列对象所需的 NEXT VALUE FOR\ns 语法的一部分,但\xe2\x80\x99 与窗口函数一起使用。

\n

OVER 子句可以包含 PARTITION BY 选项。这会将行\n分成更小的集合。您可能认为这与 GROUP\nBY 相同,但它\xe2\x80\x99 不是。分组时,每个唯一组返回一行。\n使用 PARTITION BY 时,\n所有详细信息行都会随计算一起返回。如果您家中有一扇被分成多个窗格的窗户,则每个窗格就是一个窗户。当考虑窗口函数时,整个结果集是一个分区,但是当使用 PARTITION BY 时,每个分区也可以被视为一个窗口。\nPARTITION BY 支持 \xe2\x80\x93 和可选的 \xe2\x80\ x93 适用于所有窗口函数。

\n

OVER 子句还可以包含 ORDER BY 选项。这与查询的 ORDER BY 子句无关。某些函数需要 ORDER BY,而其他函数不支持它。当应用计算时行的顺序很重要时,需要 ORDER BY。

\n

窗口函数只能在查询的 SELECT 和 ORDER BY 子句中使用。\n 它们在任何加入、过滤或分组之后应用。\n

\n
\n