SQL窗口函数

一、窗口函数应用场景:分组处理数据

二、窗口函数基本语法

<窗口函数> over (partition by <用于分组的字段名> 
				order by <用于排序的字段名>)

上面代码含义为:
首先将数据表根据<用于分组的字段名>分段,并且根据<用于排序的字段名>排序,而后对经过这两步处理的数据表执行<窗口函数>
注:partition bygroup by的区别:group by改变了表的行数,经过分组后每一组的数据成为一行,而partition by不改变表的行数。

三、常用窗口函数及使用方法

窗口函数可以分为两类:
1.专用窗口函数,如rank, dense_rank, row_number等
2.聚合函数,如max, min, sum等

1.三种排序函数:rank()、dense_rank()、row_number()
rank() over (partition by <分区字段> order by <排序字段>)
dense_rank() over(partition by <分区字段> order by <排序字段>)
row_number() over(partition by <分区字段> order by <排序字段>)
三种函数效果区分:

rank()、dense_rank()、row_number()函数都会对各分区内的数据依据排序字段进行排序,row_number()会赋予排序后的数据不同的行号,但rank()与dense_rank()会给相同排名的记录相同的序号,dense_rank()赋予使下一个排名的记录顺延的序号,而rank()则会跳过这几个序号。
举例如下:如果按照成绩排序后数据为下表:

idscore
199
299
399
498

rank()、dense_rank()、row_number()处理的结果分别如下:

  • rank()
idscorerk
1991
2991
3991
4984
  • dense_rank()
idscorerk
1991
2991
3991
4982
  • row_number
idscorerk
1991
2992
3993
4984
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页