Mysql实现对某一字段排序并将排名写入另一字段
文章目录
- 前言
- 一、数据库表结构和样例数据
- 二、排名操作
- 1.普通排名
- 2.无间隔排名
- 3.有间隔排名
- 总结
前言
最近业务上碰到这样一个需求,需要对表按照某一个字段进行排序,并且将得到的排名写入对应的排名字段。这个需求于我而言确实没有遇到过,好在试着摸索一番得以解决,故写博客记录一下。
一、数据库表结构和样例数据
本文中我们创建一张简单的成绩表来进行测试,表的结构和数据也很简单,这里不再赘述,直接放代码:
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.普通排名
普通排名就是指所有数据按其规则进行排序,尽管出现数据相同的情况,也依然存在先后顺序。
UPDATEgrades g1 INNER JOIN (SELECT id, grade,@rank := @rank + 1 AS ranking
FROM(SELECT @rank := 0) r,grades
ORDER BYgrade DESC) g2
ON g1.id = g2.id SET g1.rankNum = g2.ranking;
运行结果如图,我们也能看出排名确实是按照降序排列,而且分数相同的排名依然是有序的:

2.无间隔排名
无间隔排名就是指当存在相同数据时,我们希望它们的排名是一样的,就比如2,2,3这组数据,最终的排名效果是1,1,2;其中3这个数据的排名并没有因为前面占有两个数据而变成3,这我们称无间隔。
UPDATEgrades g1 INNER JOIN (SELECT id, grade,(CASEWHEN @prevRank = grade THEN @currankWHEN @prevRank := grade THEN @currank := @currank + 1END) AS ranking
FROM(SELECT @prevRank := NULL, @currank := 0) r,grades
ORDER BYgrade 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了,会因为占有问题而跳跃。
UPDATEgrades 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 BYgrade DESC) g2
ON g1.id = g2.id SET g1.rankNum = g2.ranking;
运行结果如图,我们可以看出此时的75已然变成了6,实现了跳跃:

总结
希望这篇博客对大家有所帮助!!!
相关文章:
Mysql实现对某一字段排序并将排名写入另一字段
文章目录 前言一、数据库表结构和样例数据二、排名操作1.普通排名2.无间隔排名3.有间隔排名 总结 前言 最近业务上碰到这样一个需求,需要对表按照某一个字段进行排序,并且将得到的排名写入对应的排名字段。这个需求于我而言确实没有遇到过,好…...
vector容器 [上]
目录 一、 对于vector的介绍 二、vector的定义 0x01 无参构造 0x02 构造并初始化n个val 0x03 使用迭代器进行初始化构造 0x04 拷贝构造 0x05 比较 三、 vector的遍历 0x01 push_back() 0x02 operator[] 和at() 0x03 遍历 四、vector 容量空间 0x01 max_size : 返回v…...
React Native技术探究:开发高质量的跨平台移动应用的秘诀
作为一个跨平台移动应用开发框架,React Native在开发过程中能够有效提高开发效率、降低开发成本、缩短上线时间,因此备受开发者的欢迎。然而,如何使用React Native开发出高质量的跨平台移动应用呢?本文将探究这个问题,…...
C语言函数大全-- w 开头的函数(2)
C语言函数大全 本篇介绍C语言函数大全-- w 开头的函数 1. wcstok 1.1 函数说明 函数声明函数功能wchar_t *wcstok(wchar_t *wcs, const wchar_t *delim, wchar_t **ptr);用于将一个长字符串拆分成几个短字符串(标记),并返回第一个标记的地…...
kafka启动创建topic报错:zookeeper is not a recognized option
当前使用版本:kafka_2.13-3.4.0 使用老版本的创建topic的命令,是用zookeeper来创建,但是报错如下 D:\Software\Doument\kafka_2.13-3.4.0> .\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 …...
11个超好用的SVG编辑工具
SVG的优势在于SVG图像可以更加灵活,自由收缩放大而不影响图片的质量,一个合适的SVG编辑工具能够让你的设计事半功倍,下面就一起来看看这些冷门软件好用在哪里。这11个超好用的SVG编辑工具依次为:即时设计、Justinmind、Sketsa SVG…...
低代码平台:10分钟从入门到原理
导航目录 一、低代码概念 二、优势及局限 三、基础功能及搭建 1、业务流程 2、用户权限 3、统计图表 四、使用感受 五、总结 传统的软件研发方式目前并不能很好地满足企业的需求:人员成本高、研发时间长、运维复杂。这时低代码工具的出现为快速开发软件提供…...
【JavaScript】如何获取客户端IP地址?
使用这个库:request-ip 它按照如下顺序获取请求的IP地址: X-Client-IPX-Forwarded-For (Header may return multiple IP addresses in the format: “client IP, proxy 1 IP, proxy 2 IP”, so we take the first one.)CF-Connecting-IP (Cloudflare)F…...
数据科学中使用的17 种相似性和相异性度量之欧氏距离
目录 1简介 2距离函数 2.1 L2范数(欧氏距离) 1简介 在数据科学中,相似性度量是一种衡量数据样本如何相互关联或相互接近的方法。另一方面,相异性度量是告诉数据对象有多少是不同的。此外,当相似的数据样本被分组到一…...
朋友去华为面试,轻松拿到30K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…...
MySQL入门第五课:数据更新
数据更新 1 插入 插入表数据 insert into 表名 (字段列表) values(值列表) insert into 表名 set 字段名1 值1,字段名2值2 插入多个数据 insert into 表名 values(值1,值2,值3.....) 这里面的值与列索引是对应的 显示表数据 select * fr…...
ALSA子系统(十八)------指纹解锁动画提示声卡顿问题解析
你好!这里是风筝的博客, 欢迎和我一起交流。 很久没写kernel相关的东西了,主要是来到手机厂之后,大部分还是在Android上,Kernel虽然也有涉及,但毕竟只是有所涉及,主要业务逻辑还是在HAL之上&am…...
[230513] TPO72 | 2022年托福阅读真题第1/36篇 | 10:45
Invading Algae 目录 Invading Algae 全文 题目 Paragraph 1 P1 段落大意 问题1 Paragraph 2 P2 段落大意 问题2 *问题3* Paragraph 3 P3 段落大意 问题4 Paragraph 4 P4 段落大意 Paragraph 5 P5 段落大意 *问题5* *问题6* 问题7 问题8 问题9…...
操作符详解
目录 操作符分类 算术操作符 - * / % 二进制 二进制总结 移位操作符(操作数只能为整数) << >> 位操作符(操作数必须为整数) & | ^ 面试题 赋值操作符 复合赋值符 单目操作符 单目操作符介绍…...
【MATLAB图像处理实用案例详解(16)】——利用概念神经网络实现手写体数字识别
目录 一、问题描述二、概念神经网络实现手写体数字识别原理三、算法步骤3.1 数据输入3.2 特征提取3.3 模型训练3.4 测试 四、运行结果 一、问题描述 手写体数字属于光学字符识别(Optical Character Recognition,OCR)的范畴,但分类…...
数据库管理-第六十九期 另一种累(20230422)
数据库管理 2023-04-22 第六十九期 另一种累1 国产数据库沟通2 问题3 我的建议总结 第六十九期 另一种累 Oracle 23c的相关内容先缓缓,有些数据库管理相关的还是得正式版发布后才好去做实验。这周相较于之前那种割接较多的累还有点不一样,这周陪着客户交…...
Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图)
Cesium加载影像图层 一、ImageryLayer类常用属性常用方法 二、ImageryLayerCollection类常用属性常用方法 三、ImageryProvider类常用属性常用方法 四、ImageryProvider子类1. ArcGisMapServerImageryProvider加载ArcGIS地图服务 2. BingMapsImageryProvider加载BingMap地图服务…...
Redis系列--redis持久化
一、为什么需要持久化 redis本身运行时数据保存在内存中,如果不进行持久化,那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然,redis本身默认采用了一种持久化方式,即RD…...
在外Windows远程连接MongoDB数据库【无公网IP】
文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自远程内网穿透的文章:公网远…...
学网络安全怎么挖漏洞?怎么渗透?
前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
