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 测试固定地址公网远程访问 转载自远程内网穿透的文章:公网远…...
学网络安全怎么挖漏洞?怎么渗透?
前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用,提高了安全防护水平。 也有很多小…...
第十二节:老旧系统改造——如何安全地让 AI 介入遗留代码(Legacy Code)重构?
引言 承接上一章对自动化编程安全的探讨,本章聚焦企业中最为棘手的遗留代码(Legacy Code)改造难题。面对缺乏文档、结构混乱的老旧系统,直接让AI“重新编写”往往导致更多隐患,本章将探讨如何安全、稳妥地引入AI进行重构。 核心理论 遗留代码大多缺乏设计文档、单元测试…...
爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?
爬虫风控对抗新思路:从数美滑块破解到系统性防御策略 滑块验证码已经成为现代爬虫工程师最头疼的障碍之一。当你精心设计的爬虫程序突然陷入"无限滑块"的循环,或是代理IP池被数美系统精准识别时,那种挫败感不言而喻。但真正的挑战不…...
10个Storybook最佳实践技巧:LearnStorybook.com核心经验分享
10个Storybook最佳实践技巧:LearnStorybook.com核心经验分享 【免费下载链接】learnstorybook.com Static site and content for Storybook tutorials 项目地址: https://gitcode.com/gh_mirrors/le/learnstorybook.com Learn Storybook是一个专注于教授开发…...
2026年最新风淋室厂家排名:净化工程优选这3家源头工厂
2026年最新风淋室厂家排名:净化工程优选这3家源头工厂在净化工程领域,风淋室作为保障洁净环境的关键设备,其质量和性能至关重要。2026年,市场上众多风淋室厂家竞争激烈,经过综合评估,为净化工程优选出以下3…...
Vitis HLS Schedule Viewer保姆级解读:从代码到硬件调度,一张图看懂你的设计瓶颈
Vitis HLS Schedule Viewer深度解析:从图形化调度到性能瓶颈精准定位 在FPGA加速设计领域,Vitis HLS作为高层次综合工具,能够将C/C代码转换为高效的硬件描述语言。然而,当设计遇到性能瓶颈时,开发者往往陷入报告数据的…...
Python 基础教程:列表(第9篇)
什么是列表? 在python中列表(list)是一种有序、可变的数据类型,可以存储任意类型的对象(整数、浮点数、字符串甚至其他列表),使用方括号[]定义,元素之间用逗号分隔。 特点࿱…...
SpringBoot2项目信创改造:东方通TongWeb嵌入式版集成实战
1. 为什么选择东方通TongWeb嵌入式版 最近几年,国产化信创改造成为很多企业技术升级的重点方向。作为技术负责人,我在实际项目中遇到了从Tomcat迁移到国产应用服务器的需求。经过多方对比,最终选择了东方通TongWeb嵌入式版,这里分…...
遗传算法优化技巧:如何用PMX交叉提升Python求解效率
遗传算法优化实战:PMX交叉在Python中的高效实现与调优 当你在解决旅行商问题(TSP)或排班优化时,是否遇到过传统交叉算子导致无效解激增的情况?部分匹配交叉(PMX)正是为解决这类排列编码问题而生的利器。作为遗传算法中最高效的交叉算子之一&a…...
深入解析ioremap:从内存映射到页表属性
1. ioremap基础概念与使用场景 第一次接触ioremap是在调试一块PCIe采集卡的时候。当时需要在Linux驱动中访问设备的寄存器空间,直接使用物理地址会引发段错误。同事轻描淡写地说:"用ioremap映射一下就行"。这个看似简单的接口背后,…...
小白程序员入门网络安全:收藏版,从零开始学密码学
小白程序员入门网络安全:收藏版,从零开始学密码学 本文带领读者进入网络安全的世界,从密码学的发展历史、古典密码、分组密码、流密码、杂凑函数到公钥密码,全面介绍了密码学的基础知识和应用。文章涵盖了凯撒密码、维吉尼亚密码…...
