开窗函数有哪些

开窗函数有哪些
最新回答
世俗如浮云

2022-06-27 20:37:31

开窗函数是SQL中用于对查询结果集进行分组计算的陪亩函数,可在每行上执行计算并返回与当前行相关的结果。以下是常见开窗函数的详细说明

ROW_NUMBER()
为结果集中的每一行分配唯一的连续整数,通常用于排序或分页。例如,按成绩降序排列时,每行会获得1、2、3…的唯一序号,即使存在相同成绩也会分配不同序号。

RANK()
计算行的排名,相同值的行会获得相同排名,但后续排名会跳过相同数量的位次。例如,若两行并列第2名,下一行排名槐雀为4(跳过第3名)。

DENSE_RANK()
与RANK()类似,但不会跳过排名位次。相同值的行获得相同排名后,下一行排名紧接前序排名。例如,两行并列第2名时,下一行排名为3。

NTILE(n)
将结果集划分为n个等大小的桶,并为每行分配桶号(从1到n)。例如,NTILE(4)会将数据分成4组,每铅乱早组包含大致相等的行数,适用于分位数计算。

LAG(column, offset)
访问当前行之前指定偏移量(offset)的行的某列值。常用于计算当前行与前一行的差值,如比较本月与上月的销售额。若偏移行不存在,则返回NULL。

LEAD(column, offset)
访问当前行之后指定偏移量的行的某列值。适用于计算当前行与后一行的差值,如预测下一周期的趋势。若偏移行不存在,则返回NULL。

聚合类开窗函数(SUM(), AVG(), MIN(), MAX())
这些聚合函数可与OVER子句结合,实现分组内计算而非全局汇总。例如,计算每个部门的平均工资时,结果会显示每行对应的部门平均值,而非整个表的平均值。

实际应用中需注意数据库系统的语法差异,并根据分析需求选择合适的函数。例如,分页查询优先用ROW_NUMBER(),排名分析可选RANK()或DENSE_RANK(),而时间序列对比常用LAG/LEAD。