【MySQL】rank()、row_number()、dense_rank()用法详解
建表测试
测试表数据:test1
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_test` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `db_test`; /*Table structure for table `test1` */
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` ( `id` int(10) NOT NULL, `score` int(20) DEFAULT NULL, `class` char(10) COLLATE utf8_bin DEFAULT NULL, `name` char(20) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
/*Data for the table `test1` */
insert into `test1`(`id`,`score`,`class`,`name`) values (1,100,'语文','张三'),(2,98,'语文','李四'),(3,98,'语文','王五'),(4,98,'数学','张三'),(5,96,'数学','李四'),(6,92,'数学','王五'),(7,85,'数学','张三'),(8,96,'语文','张三'),(9,96,'语文','张三'),(10,91,'语文','张三'),(11,91,NULL,'张三');

rank()和row_number()、dense_rank()的区别
- row_number():当分数相同的时候还会依次排序,排名不同,正常排序。即1,2,3。
- rank():当分数相同的时候不会依次排序,相同的分数排名相同,跳跃排序,即1,1,3。
- dense_rank():当分数相同的时候不会依次排序,相同的分数排名相同,连续排序,即1,1,2。
总结:row_number()不重复排序,rank()重复且跳数字排序,dense_rank()重复且不跳数字排序。
全局排序和分组排序
(1)全局排序(不加partition by)
-- MySQL8语法,row_number()、rank()、dense_rank()不分组排序对照
SELECT *,
row_number() over(ORDER BY T.score) AS `row_number`,
rank() over(ORDER BY T.score) AS `rank`,
dense_rank() over(ORDER BY T.score) AS `dense_rank`
FROM test1 T;
查询结果:

(2)分组排序(加上partition by)
-- MySQL8语法,row_number()、rank()、dense_rank()分组排序对照SELECT T.*,
ROW_NUMBER() OVER(PARTITION BY T.class ORDER BY T.score DESC) AS `row_number`,
RANK() OVER(PARTITION BY T.class ORDER BY T.score DESC) AS `rank`,
DENSE_RANK() OVER(PARTITION BY T.class ORDER BY T.score DESC) AS `dense_rank`
FROM test1 T
查询结果:

注意:
1、当score没有相同的,那么rank()和row_number()效果一样
2、如果表数据中有null,则判断的时候需要用 <=>来判断是否相等,因为null不能用=判断 select null = null 输出为null,不对,select null <=> null才返回1,对的。
应用实例
1、row_number()
(1)查询每门课程第二名的信息
SELECT * FROM (
SELECT *, row_number() over(PARTITION BY T.class ORDER BY T.score DESC) AS `rank` FROM
test1 T) AS temp
WHERE `rank` = 2;

(2)给id在1到6的学习按分数排名
SELECT *, row_number() over (ORDER BY T.score) AS `rank`
FROM test1 T
WHERE T.id BETWEEN 1 AND 6;

注意:
row_number函数得到的列别名可用于order by 排序,因为order by执行在select之后。
where, group by, having都不可引用该列,因为这些语句执行在select之前,此时函数尚未计算出值。
相关文章:
【MySQL】rank()、row_number()、dense_rank()用法详解
建表测试 测试表数据:test1 CREATE DATABASE /*!32312 IF NOT EXISTS*/db_test /*!40100 DEFAULT CHARACTER SET utf8 */; USE db_test; /*Table structure for table test1 */ DROP TABLE IF EXISTS test1; CREATE TABLE test1 ( id int(10) NOT NULL, score i…...
NFT合约部署
部署合约: 1.web3 NFT合约部署工具 https://remix.ethereum.org/ 2.tron NFT合约部署工具 https://www.tronide.io/ 3.部署 web3 ERC721代码: // SPDX-License-Identifier: MIT pragma solidity ^0.8.2;import "openzeppelin/contracts/token/ERC7…...
【C++】从入门到精通第三弹——友元函数与静态类成员
这里写目录标题 静态类成员友元友元方法 静态类成员 类成员一般都需要通过对象来访问,不可以通过类名直接访问,但是当我们将类成员定义为静态类成员,则允许使用类名直接访问。 静态类成员是在类成员前定义static关键字。 1 #include<iost…...
acwing算法基础之搜索与图论--floyd算法
目录 1 基础知识2 模板3 工程化 1 基础知识 floyd算法的时间复杂度为O(n^3),它用来解决多源最短路问题。它的原理是基于动态规划。 floyd算法的关键步骤: k从1到n。i从1到n。j从1到n,d[i][j] min(d[i][j], d[i][k] d[k][j])。经过上述三…...
Zabbix监控SSL证书有效期
一、介绍 由于业务需要,最近通过 Let’s Encrypt 申请了一些 SSL 证书,而证书有效期为 3 个月,需要在证书到期之前 renew。由于域名较多经常忘记 renew,导致证书过期,因此想通过 Zabbix 的方式监控证书的到期时间&…...
Arduino OneButton按键处理库实现单击/双击/长按功能
Arduino OneButton按键处理库实现单击/双击长按功能 ✨在Arduino开发平台下,按键的单击/双击/长按功能,在通过使用OneButton库,很容易就可以轻松实现。这就是支持C/C模块化设计的好处,避免重复性开发的工作。 🔖本文将…...
day52 django的下载与安装
课程的大致安排 大概两周的时间都是围绕着Django框架的学习,包括后续要学习的drf、Redis、celery、es等技术栈都是围绕Django展开的,因此、要求所有的同学必须认证学习了 市场中所有使用Python开发的web项目,Django框架占有率达到90%以上 …...
WebGL智慧城市软件项目
WebGL开发智慧城市项目时,需要考虑多个方面,包括技术、隐私、安全和可持续性。以下是一些需要注意的关键问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.隐私和数据安全…...
VMware重装后没有虚拟网卡
我重装VMware之后网络适配器里面没有虚拟网卡,找了CSDN上很多博主说的,都没用。 最终去看了b站的up视频就成功了。 原因是因为第一次安装后卸载不干净,软件在电脑上的注册表没有删掉。 要用下面两个软件清理一下残留文件,这两个…...
软件安全基础
传参基础 64位汇编传参,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。 我们这边要利用wr…...
探索项目管理软件的多重用途和益处
项目管理软件俨然成了当下项目管理话题中的热门词条,作为一个辅助性管理工具,项目管理软件有什么用?真的值得购入吗? 什么是项目管理软件 顾名思义,项目管理软件就是指在项目管理过程使用的各种软件工具。项目管理软件…...
Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台
文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品,订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库,可以在arduino的…...
【车载开发系列】AutoSar中的CANTP
【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP一. CANTP相关术语二. CANTP相关概念1)单帧:SF(Single Frame)2)首帧:FF(First Frame)3)连续帧CF(Consecutive F…...
JUL日志
文章目录 JUL日志JUL日志讲解Properties配置文件编写日志配置文件Lombok快速开启日志Mybatis日志系统 JUL日志 如果使用System.out.println来打印信息,项目中存在大量的控制台输出语句,会显得很凌乱,而且日志的粒度是不够细的,假…...
ZZ308 物联网应用与服务赛题第G套
2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (G卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用…...
如何使用 vcpkg 编译Google-V8脚本引擎(ECMA/JavaScript)?
WIN32K下一键杀死所有同名进程命令行:taskkill /F /IM chrome.exe ############################## 1、准备 Visual Studio 2019 2、准备 Visual Studio 2022 3、安装 VC、MSBuild 编译集成环境 4、安装 Python 3.x,早期V8发行版本编译安装 2.x 5、…...
系列二十二、idea Live Templates
一、idea Live Templates 1.1、Java Group 1.1.1、fast fast 快速在类上添加注解Data AllArgsConstructor NoArgsConstructor Accessors(chain true) ToString(callSuper true) 1.1.2、getThreadName getThreadName快速获取当前线程的名字Thread.currentThread().getName…...
电脑本地安装宝塔/docker 安装宝塔
一、先去docker官网(http://docker.com)下载软件并进行安装,网站打不开多试几次或者找梯子。 二、macos系统里按“command 空格”搜索“终端”回车,启动终端程序。 三、执行下面命令,拉取docker镜像。 docker pull pch18/baota:clear pch…...
Java Lambda 表达式笔记
文章目录 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式 Lambda 表达式,也可称为闭包. …...
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
Flutter笔记 状态提升、控制器模式、GetX控制器和服务 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
