MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明

数据表TEST中数据为4个学生的三门课程成绩,如:

MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明

1、rank()

使用rank()函数,窗口函数over() 中order by 列如果出现重复,下一序号将跳过重复的笔数顺延

select *,rank() over(partition by subject order by sorce desc) from test

结果如下:

MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明

2、dense_rank()

使用dense_rank() 函数,窗口函数over() 中order by 列如果出现重复,下一序号将顺延

select *,dense_rank() over(partition by subject order by sorce desc) from test

结果如下:

MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明

3、ROW_NUMBER(),SUM(),AVG()

ROW_NUMBER():窗口函数中partition by 列分组后,每个组的序号

SUM():窗口函数中partition by 列分组后,每个组的指定列的求和

AVG():窗口函数中partition by 列分组后,每个组的指定列的平均值

select *,

ROW_NUMBER() over(partition by name order by subject) as no,

SUM(sorce) over(partition by name) as Total,

avg(sorce) over(partition by name) as Avg_sorce  from test
 

结果:

MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明