Mysql实现对某一字段排序并将排名写入另一字段

news2024/11/26 17:00:15

文章目录

  • 前言
  • 一、数据库表结构和样例数据
  • 二、排名操作
    • 1.普通排名
    • 2.无间隔排名
    • 3.有间隔排名
    • 运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃: ![在这里插入图片描述](https://img-blog.csdnimg.cn/34f7c4db158945f1a709fc40d6f18439.png)
  • 总结


前言

  最近业务上碰到这样一个需求,需要对表按照某一个字段进行排序,并且将得到的排名写入对应的排名字段。这个需求于我而言确实没有遇到过,好在试着摸索一番得以解决,故写博客记录一下。


一、数据库表结构和样例数据

  本文中我们创建一张简单的成绩表来进行测试,表的结构和数据也很简单,这里不再赘述,直接放代码:

CREATE TABLE `grades` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `grade` int(11) DEFAULT NULL,
  `rankNum` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;
INSERT into grades (grade) VALUE (87);
INSERT into grades (grade) VALUE (100);
INSERT into grades (grade) VALUE (95);
INSERT into grades (grade) VALUE (87);
INSERT into grades (grade) VALUE (45);
INSERT into grades (grade) VALUE (67);
INSERT into grades (grade) VALUE (75);
INSERT into grades (grade) VALUE (87);

创建表之后我们插入8条数据进行测试,当然,我们的排名字段暂时是为空的,最终效果如图:
在这里插入图片描述

二、排名操作

1.普通排名

普通排名就是指所有数据按其规则进行排序,尽管出现数据相同的情况,也依然存在先后顺序。

UPDATE
	grades g1 INNER JOIN (SELECT id, grade,
	@rank := @rank + 1 AS ranking
FROM
	(SELECT @rank := 0) r,
	grades
ORDER BY
	grade DESC) g2
ON g1.id = g2.id SET g1.rankNum = g2.ranking;

运行结果如图,我们也能看出排名确实是按照降序排列,而且分数相同的排名依然是有序的:
在这里插入图片描述

2.无间隔排名

无间隔排名就是指当存在相同数据时,我们希望它们的排名是一样的,就比如2,2,3这组数据,最终的排名效果是1,1,2;其中3这个数据的排名并没有因为前面占有两个数据而变成3,这我们称无间隔。

UPDATE
	grades g1 INNER JOIN (SELECT id, grade,
	(CASE
		WHEN @prevRank = grade THEN @currank
		WHEN @prevRank := grade THEN @currank := @currank + 1
	END) AS ranking
FROM
	(SELECT @prevRank := NULL, @currank := 0) r,
	grades
ORDER BY
	grade DESC) g2
ON g1.id = g2.id SET g1.rankNum = g2.ranking;

运行结果如图,我们可以看出分数相同的87排名都是一样的,而在87之后的75的排名依然是4没有跳跃:

在这里插入图片描述

3.有间隔排名

这个排名规则是我业务上真正需要的,所谓的有间隔就是比如之前的例子2,2,3,那么最后的排名结果是1,1,3;这里的数据3不再是2了,会因为占有问题而跳跃。

UPDATE
	grades g1 INNER JOIN (SELECT id, grade,
	@currank := IF(@prevRank = grade, @currank, @rowrank) AS ranking,
	@rowrank := @rowrank + 1,
	@prevRank := grade
FROM
	(SELECT @prevRank := NULL, @currank := 0, @rowrank := 1) r,
	grades
ORDER BY
	grade DESC) g2
ON g1.id = g2.id SET g1.rankNum = g2.ranking;

运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃:
在这里插入图片描述


总结

  希望这篇博客对大家有所帮助!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.Net C# 使用 EF Core

使用ORM框架可以加快开发速度,现在简单说下在.Net开发中使用微软官方提供的ORM框架 Entity Framework Core初始化数据库及数据表上手用法。 首先引入依赖项,通过Nuget服务添加如下3个包,因为当前使用的SQL Server数据库所以引入的是SQL Ser…

【Java算法题】剑指offer_01数据结构

前言 刷题链接: https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 链表 JZ24 反转链表 思路:基本操作,如下所示。 /* public class ListNode {int val;ListNode next null;ListNode(int val) {this.val val;} }…

【开源硬件篇】STM32F103C8T6核心板

STM32F103C8T6核心板 文章目录 STM32F103C8T6核心板一、STM32F103C8T6芯片1.1 STM32F103C8T6简介1.2 芯片引脚说明 二、去耦电路2.1 原理图设计2.2 原理分析2.2.1 结论2.2.2 去耦效果图2.2.3 放置距离问题2.2.3 放置位置问题 2.3 PCB设计示例 三、晶振电路3.1 原理图设计3.2 原…

(9)AT24C02存储器

AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息 存储介质:E2P ROM通讯接口:I2C总线容量:256字节 I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线 …

linux(基础IO)下

目录: 1.追加实现重定向 2.dup2系统调用 3.程序替换是否会影响我们曾经打开的文件呢?? ---------------------------------------------------------------------------------------------------------------------------- 1.追加实现重定向…

Linux操作系统安全

账号的基本概念 用户: Linux中通过建立不同权限的用户,合理的控制和运用系统的资源,并且可以帮助用户构建自己的私人空间,更好的组织和管理自己的文件。 当创建一个用户时,系统会操作 /etc/passwd /etc/shadow 这两个文…

(10)DS18B20温度传感器

DS18B20是一种常见的数字温度传感器,其控制命令和数据都是以数字信号的方式输入输出,相比较于模拟温度传感器(如热敏电阻),具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围:-55C 到 125C通信接…

希望计算机专业同学都知道这些博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价,可见网课质量之高!最全面的面试网站 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程,用简单的语言描述复杂的…

二十九、搜索与图论——克鲁斯卡尔算法(Kruskal 算法,稀疏图)

Kruskal算法主要内容 一、基本思路1、基本思想与概念2、算法步骤3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、基本思想与概念 解决问题: 多个城市中铺公路,使城市之间可以相互联通,问如何才能让铺设公路的长度最短——铺…

二十七、搜索与图论——Floyd 算法(多元路最短路径问题)

Floyd算法主要内容 一、基本思路1、算法原理2、基本思路3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、算法原理 遍历每条边,通过比较进行路径更新——暴力 解决多源最短路问题,求解 i 点到 j 点的最短距离 f [ i, j, k] 表示从 i 走…

REST服务,使用Dubbo还是SpringMVC

pringMVC、Dubbo 都支持 REST 服务,那当我们要开发一个 REST 服务接口时,该如何选择? 本文将包括以下两方面内容: REST服务的写法 REST服务的应用场景 REST服务的写法 首先我们看下 SpringMVC 怎么实现一个 REST 服务&#xff1…

盘点数据仓库建设需要知道的那些事

文章目录 建设规范为何要有规范规范如何落地有哪些规范 数仓分层分层原则常见分层主题域划分原则数据模型设计原则数据类型规范**数据冗余规范**表规范处理规范命名规范生命周期管理 指标管理指标定义指标构成指标分类命名规范 建设规范 为何要有规范 无规矩不成方圆&#xff…

vue项目百度ueditor编辑器集成135和秀米,主题图标美化

目录 前言效果预览教程1. 首先下载主题美化插件2. 接入135编辑器3. 接入秀米编辑器4. 组件封装5. main.js引入样式和js文件6. 页面使用 完成! 前言 本文介绍vue项目里引入百度Ueditor富文本编辑器,集成135编辑器和秀米编辑器,使内容编辑更加丰…

09- 基于MASK-RCNN的气球检测项目 (目标检测)

要点: 一 项目介绍 基于MASK-RCNN框架的气球检测项目 项目介绍项目流程下载数据集下载MASK-RCNN框架源码MASK-RCNN模型介绍FPN层特征提取原理解读FPN网络架构实现解读生成框比例设置基于不同尺度特征图生成所有框RPN层的作用与实现解读候选框过滤方法Proposal层实现…

pcap文件格式

在通过使用wireshark工具抓取主机不同网段的数据包时,把抓到的数据包保存起来会发现生成的文件是.pcap文件,此篇博客主要介绍pcap文件的格式,并利用C语言的结构体知识来初窥探数据包数据。 pcap文件格式 pcap文件数据结构如下图所示&#x…

浅谈Koa2框架

框架和库 什么是框架 前端框架一般指用于简化网页设计的框架,使用广泛的前端开发套件。 比如,jquery,extjs,bootstrap等等,这些框架封装了一些功能,比如html文档操作,漂亮的各种控件&#xf…

springboot+vue农机电招平台(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的农机电招平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

Django基础框架01——安装与配置

Django基础框架01——安装与配置 1.Django是什么2.Django的由来3.Django的命名4.Django的版本发布5.Django框架的特点6.Django的设计模式6.1 MVC设计模式——Web6.2 MTV设计模式——Django 7.Django安装与配置8.Django创建第一个项目8.1 第一个项目Bookstore8.2 Django项目配置…

SolidWorks二次开发(C#)-环境搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、按照Solidworks2022和VS20223、在VS2022中创建一个Winform工程4、添加SolidWorks动态链接库5、在按钮中添加代码6、测试 1、前言 做了有些SolidWorks二次…

博客园一些主题皮肤汇总记录

文章目录 1、SimpleMemory2、Silence3、Make CNblogs Better4、cnblogs-theme-next5、CNblogs-Theme-Sakura6、其他7、总结 1、SimpleMemory 作者:BNDong - 博客园 (cnblogs.com) 美化博客地址:关于本博客样式 - BNDong - 博客园 (cnblogs.com) GitHub地…