create table scores2021-08-24 ( id int(6) ,score DOUBLE(4,2) ); insert into scores values(1,3.50); insert into scores values(2,3.65); insert into scores values(3,4.00); insert into scores values(4,3.85); insert into scores values(5,4.00); insert into scores values(6,3.65); commit; select id ,score ,rank() over(order by score desc) `rank` #按照成绩排名,纯排名 ,dense_rank() over(order by score desc) `dense_rank` #按照成绩排名,相同成绩排名一致 ,row_number() over(order by score desc) `row_number` #按照成绩依次排名 ,ntile(3) over (order by score desc) `ntile` #按照分数划分成绩梯队 from scores;
一、ROW_NUMBER()
Row_number() 在排名是序号 连续 不重复,即使遇到表中的两个一样的数值亦是如此
二、rank()
Rank() 函数会把要求排序的值相同的归为一组且每组序号一样,排序不会连续执行
三、dense_rank()
Dense_rank() 排序是连续的,也会把相同的值分为一组且每组排序号一样
四、ntile()
Ntile(num) 将所有记录分成num个组,每组序号一样
参考地址:https://leetcode-cn.com/problems/rank-scores/solution/si-da-pai-ming-han-shu-he-guan-jian-zi-b-qvaz/