mysql 的rank可以参考这篇博文https://blog.csdn.net/justry_deng/article/details/80597916
oracle 的rank(),dense_rank()
这2个函数使用方式基本一致,下面举例说明:
表test_user数据如下:
rank() 非连续排序,如果有分数相同的,下一个排序等级会跳过对应的数量,如下:
select tu.*,rank() OVER(ORDER BY score) rank FROM test_user tu;
dense_rank()连续排序,如果分数相同,下一个等级连续排序,不会跳过,具体如下:
select tu.*,dense_rank() OVER(ORDER BY score) rank FROM test_user tu;
扩展:按科目 分类排序:
select tu.*,dense_rank() OVER(PARTITION BY sub_name ORDER BY score) rank FROM test_user tu;
PARTITION BY 分区,也可以以多个条件作为分区前提
select tu.*,dense_rank() OVER(PARTITION BY sub_name,name ORDER BY score) rank FROM test_user tu;