窗口函数对一组查询行执行类似于聚合的操作。但是,聚合操作将查询行分组为一个单独的结果行,而窗口函数为每个查询行生成一个结果。
DENSE_RANK() 窗口函数恰好是我们在这个问题中需要的:
返回当前行在其分区中的排名,没有间隙。对等项被视为并列并获得相同的排名。此函数为对等组分配连续的排名;结果是大于一的组不产生不连续的排名号码。
看起来我们可以在这个问题中很好地使用 DENSE_RANK() 窗口函数。
MySQL
SELECT
S.score,
DENSE_RANK() OVER (
ORDER BY
S.score DESC
) AS 'rank'
FROM
Scores S;