ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL笔试 - 1. 分数排名(同分不并列,同分并列连续,同分并列不连续)

2021-11-15 16:35:46  阅读:221  来源: 互联网

标签:同分 分数 aaa paiming 并列 score MySQL 排名 select


创建测试表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), 此场景不对分数列去重。

标签:同分,分数,aaa,paiming,并列,score,MySQL,排名,select
来源: https://www.cnblogs.com/zhoujie0710/p/15556398.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有