有关排名排序的三种常用窗口函数
(1) select rank over( order by scores desc ) from table
这种排序是允许并列,并且保留空缺,两个第1名,没有第2名,排名是1,1,3
(2)select dense_rank over(order by scores desc) from table
这种排序是允许并列,不留空,两个第1名,接下来就是第2名,排名是1,1,2
(3)select row_number() over(order by score desc) from table
这种是不允许并列,如果分数是100,100,99 ,这里的排名依旧是1,2,3
4)select ntitle(10) over(order by score desc ) from table
呈现的结果是将分数平均分成10个一组的子集,假如90分以上的有10个,他们就是子集1 ,假如80-90分的有19个,那么一般前10个是子集2,后9个是子集3
ntile( n ) over():
将数据集先排序,再平均分配到指定的数量为n的集合中,排序对应的数字为分类后的子集序列号。如果不能平均分配,较小的子集分配额外行,并各个子集中能放的数据条数最多差1
常用聚合函数与窗口函数结合使用
实际上相当于分类汇总后求聚合,下面是同样 的聚合函数,使用不同的字句或者不加字句出现的不同结果
select