窗口函数作用
在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:
排名问题:每个部门按业绩来排名
topN问题:找出每个部门排名前N的员工进行奖励
面对这类需求,就需要使用sql的高级功能窗口函数了。
窗口函数的语法
窗口函数() over (partition by 用于分组的列名 order by 用于排序的列名) as ranking
注意,最好不要使用关键字作为列名,非要使用请一定加上''引起来 窗口函数的位置可以放置专业窗口函数或者聚合函数 常用的专业窗口函数有:
- rank 生成的排序序号是有可能不连续的,比如1,1,3,4,4,6
- dense_rank 生成的排序序号是可以重复连续的,比如1,1,2,3,3,3,4
- row_number 生成的排序序号是不重复并且连续的,即使列的值相同序号也不相同的,比如1,2,3,4,5 常用的聚合函数有sum,count,avg,max,min,round等