窗口函数
一 窗口函数有什么用?
在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:
排名问题:每个部门按业绩来排名
topN问题:找出每个部门排名前N的员工进行奖励
面对这类需求,就需要使用sql的高级功能窗口函数了。
二 什么是窗口函数 ?
窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。
窗口函数的基本语法如下:
select
count(1) over(partition by name) ,
from
tb_orders ;
在进行分组聚合以后 , 我们还想操作集合以前的数据 就可以使用到窗口函数
三 相关的一些函数说明
1)OVER(): 指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化
2)CURRENT ROW:当前行 current row
3)n PRECEDING:往前n行数据 n preceding
4)n FOLLOWING:往后n行数据 n following
5)UNBOUNDED PRECEDING 起点, 表示从前面的起点,
6)UNBOUNDED FOLLOWING 表示到后面的终点
7)LAG(col,n):往前第n行数据 lag 参数一 字段 n
8)LEAD(col,n):往后第n行数据 lead
9)NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。 ntile(5)
四 习题练习
jack,2020-01-01,10
tony,2020-01-02,15
jack,2020-02-03,23
tony,2020-01-04,29
jack,2020-01-05,46
jack,2020-04-06,42
tony,2020-01-07,50
jack,2020-01-08,55
mart,2020-04-08,62
mart,2020-04-09,68
neil,2020-05-10,12<