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