表数据如下
select * from score; score.name score.subject score.score r1 r2 r3 大海 语文 94 1 1 1 大海 英语 84 2 2 2 大海 数学 56 3 3 3 婷婷 数学 85 1 1 1 婷婷 英语 78 2 2 2 婷婷 语文 65 3 3 3 孙悟空 数学 95 1 1 1 孙悟空 语文 87 2 2 2 孙悟空 英语 68 3 3 3 宋宋 数学 86 1 1 1 宋宋 英语 84 2 2 2 宋宋 语文 64 3 3 3
函数说明:
RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算
select *,rank() over(distribute by name sort by score desc) r1,dense_rank() over(distribute by name sort by score desc) r2, row_number() over(distribute by name sort by score desc) r3 from score; score.name score.subject score.score r1 r2 r3 大海 语文 94 1 1 1 大海 英语 84 2 2 2 大海 数学 56 3 3 3 婷婷 数学 85 1 1 1 婷婷 英语 78 2 2 2 婷婷 语文 65 3 3 3 孙悟空 数学 95 1 1 1 孙悟空 语文 87 2 2 2 孙悟空 英语 68 3 3 3 宋宋 数学 86 1 1 1 宋宋 英语 84 2 2 2 宋宋 语文 64 3 3 3
原文:https://www.cnblogs.com/noyouth/p/12733357.html