三种排序函数,分别是rank()和dense_rank()和row_number()函数,简单说一下它们的区别:
函数 | 含义 | 例子 |
---|---|---|
rank() | 考虑数据的重复性 ,挤占坑位 | 1,2,2,4 |
dense_rank() | 考虑数据重复性,不挤占坑位 | 1,2,2,3 |
row_number() | 不考虑数据的重复性,按照顺序依次标上顺序 | 1,2,3,4 |
下面介绍它们的基本语法:
RANK()函数
RANK() OVER([query_partition_clause] order_by_clause)
query_partition_clause:分组
order_by_clause:排序
DENSE_RANK()函数
DENSE_RANK() OVER([query_partition_clause] order_by_clause)
其用法类似于RANK()函数,所以在此就用一个例子来演示这两个函数的用法:
select Score ,dense_rank() over( order by S.Score desc) as "Rank" from Scores S
实现的是分数排名,分数相同的排名相同,下一个名次是一个连续的整数值。其实是leetcode上的一道题分数排名
ROW_NUMBER()函数
语法如下:
ROW_NUMBER() OVER([query_partition_clause] order_by_clause)
用法和上面两个类类似,在此就不再赘述了。