概念
RANK():排序相同时会重复,总数不会变。
DENSE_RANK():排序相同时会重复,总数会减少.
ROW_NUMBER():会根据顺序排算。
实操讲解
现在有一张score表
做查询操作:
SELECT
*, RANK () over (
PARTITION BY SUBJECT
ORDER BY
score DESC
) AS RANK,
DENSE_RANK () over (
PARTITION BY SUBJECT
ORDER BY
score DESC
) AS DENSE_RANK,
ROW_NUMBER () over (
PARTITION BY SUBJECT
ORDER BY
score DESC
) AS ROW_NUMBER
FROM
score;
结果:
通过英语学科来看:
RANK排序相同时会重复,总数4个不会变,直接跳过了第2,排名为1134。
DENSE_RANK排序相同时会重复,总数减少变成3个,排名为1123。
ROW_NUMBER根据顺序排算,总数4个不会变,排名为1234