记录sql窗口函数(rank)

191 阅读1分钟

窗口函数作用

在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求:

排名问题:每个部门按业绩来排名
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等
最后,需要注意的是partition分组函数式可以省略的,省略就代表不进行分组