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;