窗口函数(Window Function)是 SQL 中用于在查询结果中进行复杂计算的一类函数。它们通过对查询结果集的某个“窗口”进行操作,允许在不改变查询结果的前提下,执行类似于聚合函数的计算。与传统的聚合函数(如 、 等)不同,窗口函数不会将结果集压缩成单一的行,而是为每一行提供一个基于“窗口”内其他行的数据的计算结果。
1.窗口函数的基本结构
窗口函数的语法通常如下:
- :窗口函数的具体类型,如 、、、 等。
- :指定如何将数据分组(类似于 ),在每个分组内独立地计算窗口函数。如果没有指定,窗口函数会作用于整个结果集。
- :指定在分组内对行进行排序。排序对于许多窗口函数(如排名函数)非常重要。
- :指定窗口的范围,决定窗口函数计算时考虑的行的范围。
2.常见的窗口函数
-
: 为每一行分配一个唯一的序号,根据 排序。
-
: 为每一行分配一个排名,相同的值会得到相同的排名,但排名是连续的,跳过重复的排名值。
-
: 与 类似,但不会跳过排名值。即使有多个相同值,排名仍然是连续的。
-
: 将数据分成 份,并为每一行分配一个组编号(1 到 n)。
-
、、、: 对窗口内的值进行求和、平均、最小值、最大值等计算,通常与 和 结合使用。
-
和 : 返回当前行相对于前一行或后一行的值。常用于计算行与行之间的差异
3.窗口函数与聚合函数的区别
- 聚合函数:会对数据进行分组,并返回每个分组的单一结果,如 , , 等。
- 窗口函数:不会对数据进行压缩或分组,而是在结果集的每一行上执行计算,可以结合分组和排序来计算出更多的信息。
举个例子,假设有一个员工表 ,包含 和 列,使用窗口函数 来计算每个员工所在部门的总薪资:
这里, 会计算每个部门内所有员工的薪资总和,并为每个员工显示出来,而不会压缩为每个部门只显示一行结果。
4.窗口函数的常见应用场景
-
运行总和: 使用 或 可以计算从第一行到当前行的累计值,例如累计销售额。
-
移动平均: 使用 或 子句,可以计算移动平均值,这在金融和分析场景中很常见。
-
比较行与行之间的数据差异: 使用 或 可以比较当前行和相邻行的数据,比如计算每个员工工资与上一年工资的差异。
例子:计算每个员工与上一名员工薪水的差异
在这个例子中, 会返回当前员工薪资的前一个员工薪资,然后计算差异。
5.总结
以上就是本篇文章【窗口函数ROW_NUMBER()、RANK() 或 DENSE_RANK()排名,详解区别】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/30673.html
文章
相关文章
动态
同类文章
热门文章
栏目首页
网站地图
返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多