MSSQL 中窗口函数 OVER()使用dense_rank(),rank(),ROW_NUMBER()及统计函数说明
数据表TEST中数据为4个学生的三门课程成绩,如:
1、rank()
使用rank()函数,窗口函数over() 中order by 列如果出现重复,下一序号将跳过重复的笔数顺延
select *,rank() over(partition by subject order by sorce desc) from test
结果如下:
2、dense_rank()
使用dense_rank() 函数,窗口函数over() 中order by 列如果出现重复,下一序号将顺延
select *,dense_rank() over(partition by subject order by sorce desc) from test
结果如下:
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
结果: