编写 SQL 查询对分数进行排序。排名按以下规则计算:
-
分数应按从高到低排列
-
如果两个分数相等,那么两个分数的排名应该相同。
-
在排名相同的分数后,排名数应该是下一个连续的整数。也就是排名之间不应该有空缺的数字。
解题:
判断当前比当前成绩大的所有数据,并去重之后的数量就是当前成绩的排名
???好懵逼,什么当前比当前大的成绩先看完整代码
select a.Score as score,
(select count(distinct b.Score)
from Scores b where b.Score>=a.Score
) as `rank`
from Scores a
order by a.Score desc
先看子查询,查找的结果是一个数量,这个数量有一个条件,去重复的成绩,和当前的成绩进行判断,即:b表去重复的成绩>=a表当前的成绩,得到的东西是一个数量,这个数量就是当前的排名。
select count(distinct b.Score)
from Scores b where b.Score>=a.Score
例如以下数据:去重复后只剩下70,80,90三个成绩数据,第一个成绩是80,去重复的成绩>=当前的成绩得到的东西是数字2,代表2个数据,80和90,即排名为2。
最后对查询到的数据对成绩进行降序排序,得到结果。
order by a.Score desc
OK,一个简单的成绩排序SQL语句就写好啦,最近公司没有给分配项目,没有客户的骚扰属实无聊,通过这种方式来摸鱼,顺便也学习,要是翅膀硬了就跑路哈哈哈哈。