一、窗口函数定义
窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。窗口函数与group by类似,都会进行分区,但是窗口函数是对每一行数据都生成一个结果。
基本语法:
【窗口函数】 over (partition by 【分组依据的字段】 order by 【排序依据的字段】)
其中窗口函数有聚合函数和专用窗口函数两种。(聚合:sum\min\avg\max\count等;专用:row_number() :Row_number() over只是用于把查询的数据,为他增加一列连续的ID数/
rank():增加一列排名/dense_rank():增加一列排名/
但是三者有区别: (rank同名次的会显示一样的,但也是占一个位所以第二名没有了;dense_rank就不会占了第二的位;row_number不管同名直接按序123)
【expr:表示字段名,例如lead(name,n),返回当前行的下n行的name】
sum,min,max,count,avg都是针对自身记录、以及自身记录之上的所有数据进行计算
(图示:第2行洲总人口=第一行name+第二行name 所对应的人口,一行行累加)
二、小结
1.窗口函数只能写在select子句中
2.窗口函数中的partition by 子句可以指定分区,和group by 去重分组不同,partition by只分区不去重。
3.窗口函数中没有partition by 子句时,整个表就是一个区
4.排序窗口函数中 order by 是必选的,依据指定字段和指定排序方法进行排序
三、示例
窗口函数先分组再排序,先自己制作一个已经排好gpa的表,在这个表里找最小的gpa数据.格式化书写就比较不容易报错。利用了窗口函数和子查询,注意row_number返回的是排名号
SQL34: