MySQL四大排名函数
用于测试的表
Row_Number()
-- 排序分数,并显示排名
SELECT score,ROW_NUMBER() OVER(order By score desc)as `row_number` FROM `order_function_test`
执行结果
由结果可见Row_Number()这个函数就是普通的按照行数来显示
Rank()
SELECT score ,RANK() OVER(order By score desc)as `row_number` FROM `order_function_test`;
执行结果
可见Rank()函数会考虑相同的数据,赋予相同的排名,之后就会直接跳过,例如两个第一,下来就是第三,不会赋值第二
dense_rank()
SELECT score ,DENSE_RANK() OVER(order By score desc)as `row_number` FROM `order_function_test`;
执行结果
dense_rank()相比较与rank(),会发现排名是连续的,即两个第一之后是第二,而rank()会变成第三
ntile()
NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值。将一个有序的数据集划分为多个桶(bucket),并为每行分配一个适当的桶数(切片值,第几个切片,第几个分区等概念)。它可用于将数据划分为相等的小切片,为每一行分配该小切片的数字序号
-- 切成3组,返回组号
SELECT score ,ntile(3) OVER(order By score desc)as `row_number` FROM `order_function_test`;
执行结果
将数据分成了三组,如果切片不均匀默认添加第一分组的数据量,主要用于统计出前几分之几的数据
总结
以上就是4中排序函数应用,主要区别就是按照需求来使用,有的排名连续,有的不连续,ntile()更注重分组效果