加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql综合排序_MySQL排序rank

发布时间:2022-09-14 15:27:01 所属栏目:MySql教程 来源:
导读:  在数据库中对数据进行操作的时候,经常要进行排序,比如成绩表中要按照成绩排名等,由于MySQL没有开窗函数,不能直接使用排序rank函数,今天分享2个MySQL中进行的排序的操作。

  一:自变量法排序

  
  在数据库中对数据进行操作的时候,经常要进行排序,比如成绩表中要按照成绩排名等,由于MySQL没有开窗函数,不能直接使用排序rank函数,今天分享2个MySQL中进行的排序的操作。
 
  一:自变量法排序
 
  首先在MySQL中建一个成绩表(score)如下,mark 为分数,并没有order by排序,在后面进行排序操作的时候首先要对mark进行排序,并且为降序desc。
 
  对成绩表进行排名,分数最高的为1,如果2个分数相同,则排名相同,我们想得到的结果如下
 
  代码如下(使用Navicat):
 
  对上述代码进行解释,第9行为排序,降序为desc,设置自定义变量2个,分别是@r和@m,其中第7行和第10行为自定义变量赋值。mysql中对自定义变量的赋值是(:=),比如@r:=1,判断自定义变量是否等于值mark,代码为@m=mark。(如果有同学对自定义变量不清楚,可以再详查相关解释)
 
  我在Navicat上遇到一个很有意思的问题,将排名rank_mark字段名设置为rank或者Rank的时候,都会报错,有同学遇到类似问题的时候可以注意下。
 
  如果是希望排名不连续,得到下面的结果
 
  代码如下:
 
  排名还有很多其他情况,比如按照班级对成绩进行排名,还要判断班级是否一样mysql排序,这样的情况,在多加一个if()判断就可以,MySQL进行排序的核心是合理利用自定义变量,难点是自定义变量赋值和判断自定义变量是否等于某一值,要注意冒号:的使用。
 
  二 自交法排序(左交法)
 
  自交法意思是自己和自己对比,看比自己分数高的有几个,比如有下列数据,8个学生的成绩需要从高到低排序,输出列有sno,degree,rank_degree数据源
 
  代码展示:
 
  对自交法的解释:给a表的每个sno的degree,看b表中有多少个degree大于a表该sno的degree,比如最高分的sno,b表中大于其的数量为0,最低分的sno,b表中大于其的数量为总数-1(除去自己,其余的分数都比自己高)。
 

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!