mysql之分数排名,排序函数rank()over()、dense_rank()over(。。。_百 ...
mysql之分数排名,排序函数rank()over()、dense_rank()over(。。。背景
leetcode刷题,⼀些问题记录,其中看到有⼈⽤到了dense_rank() over()函数,所以特意建表分析,记录学习,其中关于三个函数的参考了
mysql之分数排名
编写 SQL 查询对分数进⾏排序。排名按以下规则计算:
分数应按从⾼到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是下⼀个连续的整数。换句话说,排名之间不应该有空缺的数字。
数据
mysql8.0版本以前写法
只根据分数来排名,不管科⽬
select a.score as score,
(select count(distinct b.score)from score b where b.score >= a.score)'rank'
from score a
order by a.score DESC;
结果
mysql8.0以后
rank函数的用法只根据分数来排名,不管科⽬,使⽤**dense_rank() over()**函数,有并列的数据,名次不会空出来
SELECT score.*,
dense_rank()over(order by score desc)as'Rank'
FROM score;
rank() over()
partition by A order by B desc 通过A来分组,通过分组⾥⾯的B字段来进⾏组内排序,如果有重复的排
名,会把下⾯的排名空出来,如这⾥有两个1,中间就少个2,直接就是第三名
select score.*,rank()over(partition by subject order by score desc)'rank'from score;
row_number() over()
这个函数不需要考虑是否并列,根据条件查询出来的数值如果相同也会进⾏连续排名
SELECT score.*,
row_number()over(partition by subject order by score desc)as'Rank'
FROM score;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。