开窗函数的关键字是 over,一般用在聚合函数的后面
开窗函数与group by 的比较
开窗函数用于计算基于组的某种聚合值,并且对每个组返回多行,但是group by 一个组只返回一行
over() 不加参数,窗口大小为所有行
over(partition by 字段) 窗口大小为所在分区的大小
over(partition by 字段 order by 字段 [asc/desc]) 窗口大小为分区内的第一行一直到当前行
over(distribute by 字段 sort by 字段 [asc/desc]) 待思考
相应的窗口函数(需配合 over() 使用):
ntile(数值) over(…)
对窗口所在行按顺序进行切片,并返回切片值(第几片),可以用于按比例查询数据,需要将切片的结果作为子表实现按比例查询
LAG(字段,数值n,默认值) over(…)
返回当前窗口数据行前面的第n行,选择的默认值为当不存在当前数据行前面的第n行时,返回的值
LEAD(字段,数值n,默认值) over(…)
返回当前窗口数据行后面的第n行,选择的默认值为当不存在当前数据行后面的第n行时,返回的值
first_value(字段) over(…)
返回当前窗口的第一行的值
last_value(字段) over(…)
返回当前窗口第一行到当前行的记录中最后一行的值
排名函数:对窗口内的行按顺序显示排名,具体排名时选择哪个,还是看需求
row_number() over(partition by 字段 order by 字段

本文深入解析开窗函数的使用,对比groupby功能,详细介绍ntile、LAG、LEAD等窗口函数,以及row_number、rank、dense_rank排名函数的应用场景。通过实例演示如何利用开窗函数查询数据排名,实现按比例查询及获取topN效果。
最低0.47元/天 解锁文章
1244

被折叠的 条评论
为什么被折叠?



