概述
MySQL
自带的排名的函数,主要有:
row_number()
rank()
dense_rank()
ntile()
测试数据
测试数据如下所示:
row_number() 函数
用法如下:
SELECT row_number() OVER (ORDER BY Salary DESC) row_num,Salary
FROMEmployee
查询结果如下:
注意,row_number()
函数在 Salary
相等的情况下,行号是递增的
rank() 函数
SELECT rank() OVER (ORDER BY Salary DESC) row_num,Salary
FROMEmployee
查询结果如下所示:
可以发现
- 在
Salary
相等的情况下,行号是相等的。 Salary
相等的一批数据的下一个Salary
的行号不是连续的,比如说有两个Salary
的行号都是2
,那么下个Salary
的行号将会是4
。
dense_rank() 函数
用法如下:
SELECT dense_rank() OVER (ORDER BY Salary DESC) row_num,Salary
FROMEmployee
查询结果如下所示:
注意,与 rank()
的区别为,Salary
相等的一批数据的下一个 Salary
的行号是连续的,比如说有两个 Salary
的行号都是 2
,那么下个 Salary
的行号将会是 3
。
ntile() 函数
用法如下:
SELECT ntile(3) OVER (ORDER BY Salary DESC) row_num,Salary
FROMEmployee
查询结果如下所示:
ntile(int n)
函数,是把查询结果进行分组的函数,将查询结果分为 n
组