MySQL笔试 - 1. 分数排名(同分不并列,同分并列连续,同分并列不连续)
2021/11/15 19:10:25
本文主要是介绍MySQL笔试 - 1. 分数排名(同分不并列,同分并列连续,同分并列不连续),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
创建测试表aaa如下:
1. 获取分数 高>低 排名,且要求同分数情况不并列。
结果:
SQL :SELECT score ,(@paiming :=@paiming+1) rank from aaa ,(SELECT @paiming:=0) bbb ORDER BY score DESC
分析1:select score from aaa order by score desc; -- 此语句将分数高到低排序
分析2:定义表2,字段为一个用户变量@paiming,且每次执行查询的时候,此变量初始化赋值为0(一次from初始化一次),
@paiming := @paiming+1 语句在select查询结果集的每一条记录都会执行一遍,所以@paiming 变量会递增;
经过aaa表和bbb表的笛卡尔积则可生成排名。
2. 分数 高 > 低 排名,且要求分数相同时,并列排名 , 且排名要连续。
结果:
SQL:select a.score , (select count(distinct b.score) CNT from aaa b where b.score > a.score )+1 rank from aaa a order by a.score desc ;
分析1:子查询语句 , select count(distinct b.score) CNT from aaa b where b.score > a.score 查询b表分数大于a表此记录(因为使用的是子查询,比较的是a表当前记录)的分数的记录数,
当记录数为0(没有比它大的分数)则说明此分数排第1,记录数为1(只有1个数比它大)则说明此分数排第2,以此类推...
3. 分数 高 > 低 排名,且要求分数相同时,并列排名 , 且排名要求不连续。
结果:
SQL:select a.score , (select count(b.score) CNT from aaa b where b.score > a.score )+1 rank from aaa a order by a.score desc ;
分析1:与第2题的场景区别在于是否要求排名连续,SQL的区别在于count(distinct b.score) 和count(b.score), 此场景不对分数列去重。
这篇关于MySQL笔试 - 1. 分数排名(同分不并列,同分并列连续,同分并列不连续)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程