1. RANK():跳跃排序(序号可能重复)。 排序字段值相同的序号相同。例如3条记录中前2条排序字段值相同,第3条不同,则前3条记录的排序号为1,1,3。

语法:

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]   -- 可选项
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

注释: 1)PARTITION BY子句将结果集划分为分区。RANK()功能在分区内执行,并在跨越分区边界时重新初始化。

2)ORDER BY子句按一个或多个列或表达式对分区内的行进行排序。

2. ROW_NUMBER():连续排序(序号不重复)。 按查出的记录数前后排序,序号不重复。即第1条记录序号为1,第2条记录序号2,第3条记录序号为3(不考虑3条记录的排序字段是否重复)。

语法:

ROW_NUMBER() OVER (
    PARTITION BY <expression>[{,<expression>...}]  -- 可选项
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]

3. DENSE_RANK():连续排序(序号可能重复)。

语法:

DENSE_RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]  -- 可选项
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]

本题解答:

SELECT id,
       number,
       DENSE_RANK() OVER(
       ORDER BY number DESC) AS t_rank
FROM passing_number

参考: https://blog.csdn.net/ZHUXIUQINGIT/article/details/100587839 https://www.begtut.com/mysql/mysql-rank-function.html