当前位置: 首页 > news >正文

【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()用法详解

建表测试 测试表数据&#xff1a;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合约部署

部署合约&#xff1a; 1.web3 NFT合约部署工具 https://remix.ethereum.org/ 2.tron NFT合约部署工具 https://www.tronide.io/ 3.部署 web3 ERC721代码&#xff1a; // SPDX-License-Identifier: MIT pragma solidity ^0.8.2;import "openzeppelin/contracts/token/ERC7…...

【C++】从入门到精通第三弹——友元函数与静态类成员

这里写目录标题 静态类成员友元友元方法 静态类成员 类成员一般都需要通过对象来访问&#xff0c;不可以通过类名直接访问&#xff0c;但是当我们将类成员定义为静态类成员&#xff0c;则允许使用类名直接访问。 静态类成员是在类成员前定义static关键字。 1 #include<iost…...

acwing算法基础之搜索与图论--floyd算法

目录 1 基础知识2 模板3 工程化 1 基础知识 floyd算法的时间复杂度为O(n^3)&#xff0c;它用来解决多源最短路问题。它的原理是基于动态规划。 floyd算法的关键步骤&#xff1a; k从1到n。i从1到n。j从1到n&#xff0c;d[i][j] min(d[i][j], d[i][k] d[k][j])。经过上述三…...

Zabbix监控SSL证书有效期

一、介绍 由于业务需要&#xff0c;最近通过 Let’s Encrypt 申请了一些 SSL 证书&#xff0c;而证书有效期为 3 个月&#xff0c;需要在证书到期之前 renew。由于域名较多经常忘记 renew&#xff0c;导致证书过期&#xff0c;因此想通过 Zabbix 的方式监控证书的到期时间&…...

Arduino OneButton按键处理库实现单击/双击/长按功能

Arduino OneButton按键处理库实现单击/双击长按功能 ✨在Arduino开发平台下&#xff0c;按键的单击/双击/长按功能&#xff0c;在通过使用OneButton库&#xff0c;很容易就可以轻松实现。这就是支持C/C模块化设计的好处&#xff0c;避免重复性开发的工作。 &#x1f516;本文将…...

day52 django的下载与安装

课程的大致安排 大概两周的时间都是围绕着Django框架的学习&#xff0c;包括后续要学习的drf、Redis、celery、es等技术栈都是围绕Django展开的&#xff0c;因此、要求所有的同学必须认证学习了 市场中所有使用Python开发的web项目&#xff0c;Django框架占有率达到90%以上 …...

WebGL智慧城市软件项目

WebGL开发智慧城市项目时&#xff0c;需要考虑多个方面&#xff0c;包括技术、隐私、安全和可持续性。以下是一些需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.隐私和数据安全…...

VMware重装后没有虚拟网卡

我重装VMware之后网络适配器里面没有虚拟网卡&#xff0c;找了CSDN上很多博主说的&#xff0c;都没用。 最终去看了b站的up视频就成功了。 原因是因为第一次安装后卸载不干净&#xff0c;软件在电脑上的注册表没有删掉。 要用下面两个软件清理一下残留文件&#xff0c;这两个…...

软件安全基础

传参基础 64位汇编传参&#xff0c;当参数少于7个时&#xff0c; 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时&#xff0c; 前 6 个与前面一样&#xff0c; 但后面的依次从 “右向左” 放入栈中&#xff0c;即和32位汇编一样。 我们这边要利用wr…...

探索项目管理软件的多重用途和益处

项目管理软件俨然成了当下项目管理话题中的热门词条&#xff0c;作为一个辅助性管理工具&#xff0c;项目管理软件有什么用&#xff1f;真的值得购入吗&#xff1f; 什么是项目管理软件 顾名思义&#xff0c;项目管理软件就是指在项目管理过程使用的各种软件工具。项目管理软件…...

Arduino ESP8266使用AliyunIoTSDK.h连接阿里云物联网平台

文章目录 1、AliyunIoTSDK简介2、相关库安装3、阿里云创建产品&#xff0c;订阅发布4、对开源的Arduino ESP8266源代码修改5、使用阿里云点亮一个LED灯6、设备向阿里云上传温度数据7、项目源码 1、AliyunIoTSDK简介 AliyunIoTSDK是arduino的一个库&#xff0c;可以在arduino的…...

【车载开发系列】AutoSar中的CANTP

【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP 【车载开发系列】AutoSar中的CANTP一. CANTP相关术语二. CANTP相关概念1&#xff09;单帧&#xff1a;SF(Single Frame)2&#xff09;首帧&#xff1a;FF(First Frame)3&#xff09;连续帧CF(Consecutive F…...

JUL日志

文章目录 JUL日志JUL日志讲解Properties配置文件编写日志配置文件Lombok快速开启日志Mybatis日志系统 JUL日志 如果使用System.out.println来打印信息&#xff0c;项目中存在大量的控制台输出语句&#xff0c;会显得很凌乱&#xff0c;而且日志的粒度是不够细的&#xff0c;假…...

ZZ308 物联网应用与服务赛题第G套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;G卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…...

如何使用 vcpkg 编译Google-V8脚本引擎(ECMA/JavaScript)?

WIN32K下一键杀死所有同名进程命令行&#xff1a;taskkill /F /IM chrome.exe ############################## 1、准备 Visual Studio 2019 2、准备 Visual Studio 2022 3、安装 VC、MSBuild 编译集成环境 4、安装 Python 3.x&#xff0c;早期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)下载软件并进行安装&#xff0c;网站打不开多试几次或者找梯子。 二、macos系统里按“command 空格”搜索“终端”回车&#xff0c;启动终端程序。 三、执行下面命令&#xff0c;拉取docker镜像。 docker pull pch18/baota:clear pch…...

Java Lambda 表达式笔记

文章目录 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式语法Lambda 表达式实例Lambda表达式与函数式接口方法引用处理lambda表达式的接口 Java Lambda 表达式 Lambda 表达式&#xff0c;也可称为闭包. …...

Flutter笔记:状态提升、控制器模式、GetX控制器和服务

Flutter笔记 状态提升、控制器模式、GetX控制器和服务 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/1…...

PLC工程师必备:用S7-1200的Slice寻址实现产线IO信号高效映射(附TIA Portal工程文件)

PLC工程师实战&#xff1a;S7-1200 Slice寻址在产线IO信号映射中的高阶应用 走进任何现代化生产车间&#xff0c;设备与控制系统之间的信号交互如同神经系统般密集而精确。作为自动化工程师&#xff0c;我们常常需要处理成百上千个数字量信号——从光电传感器的触发到电磁阀的开…...

STM32裸机4-bit驱动HD44780字符LCD库

1. 项目概述CharLcd4bit是一款专为 STM32F103RB 微控制器&#xff08;如 NUCLEO-F103RB 开发板&#xff09;设计的轻量级字符型液晶显示驱动库&#xff0c;面向标准 HD44780 兼容的 162 字符 LCD 模块&#xff08;典型型号&#xff1a;JHD162A、LM016L、PC1602 等&#xff09;&…...

Excel VBA宏实战:自定义msgbox弹窗交互设计

1. 为什么需要自定义MsgBox弹窗&#xff1f; 在Excel自动化操作中&#xff0c;默认的MsgBox弹窗往往显得过于简单和呆板。想象一下&#xff0c;当你设计了一个自动化的报表系统&#xff0c;用户点击按钮时突然蹦出一个白底黑字的"操作成功"提示&#xff0c;这种体验就…...

告别Update轮询!用Unity Input System重构你的玩家控制器(含完整配置流程)

告别Update轮询&#xff01;用Unity Input System重构你的玩家控制器&#xff08;含完整配置流程&#xff09; 在Unity游戏开发中&#xff0c;输入管理一直是开发者需要面对的核心挑战之一。传统的Input Manager虽然简单易用&#xff0c;但随着项目复杂度提升&#xff0c;其局限…...

PEASS使用教程

在Kali Linux的权限提升工具生态中&#xff0c;PEASS&#xff08;Privilege Escalation Awesome Scripts SUITE&#xff0c;权限提升优秀脚本套件&#xff09;是一款覆盖Linux与Windows双平台的自动化权限提升扫描工具集。它通过整合Linpeas&#xff08;Linux平台&#xff09;与…...

CISSP域3知识点 安全工程基础

&#x1f3d7;️ CISSP 域3安全工程基础丨把安全"建"进系统里Domain 3 安全架构与工程 OSG第十版第8章核心内容 占域3&#xff08;13%总权重&#xff09;30%以上&#xff0c;概念题场景题双高频 这一块是整个 CISSP 的理论地基&#xff0c;不搞透&#xff0c;后面很…...

WPF无边框窗口最大化时避免遮挡任务栏的终极方案

1. 为什么无边框窗口会遮挡任务栏&#xff1f; 很多开发者在使用WPF开发自定义窗口时&#xff0c;都会遇到一个头疼的问题&#xff1a;当窗口设置为无边框&#xff08;WindowStyle"None"&#xff09;并最大化时&#xff0c;窗口会遮挡系统的任务栏。这个问题看似简单…...

ChibiPIO-STM32F0:专为Cortex-M0优化的ChibiOS定制发行版

1. 项目概述ChibiPIO-STM32F0 是一个面向 STM32F0 系列微控制器的定制化 ChibiOS/RT 嵌入式实时操作系统发行版&#xff0c;其核心定位并非独立开发的新RTOS&#xff0c;而是对上游 ChibiOS/RT 源码树进行深度裁剪、适配与封装后的专用构建产物。它完整继承 ChibiOS/RT 的轻量级…...

轻量级分布式日志管理方案选型指南:Graylog、Loki与ELK的核心差异与应用场景

1. 为什么企业需要轻量级日志管理系统&#xff1f; 当你的业务从单机部署扩展到10台服务器时&#xff0c;用SSH登录每台机器grep日志还能勉强应付。但当集群规模达到上百节点&#xff0c;特别是采用Kubernetes编排的容器化环境&#xff0c;每天产生GB级日志时&#xff0c;传统方…...

[Linux][虚拟串口]x一个特殊的字节蓟

简介 langchain专门用于构建LLM大语言模型&#xff0c;其中提供了大量的prompt模板&#xff0c;和组件&#xff0c;通过chain(链)的方式将流程连接起来&#xff0c;操作简单&#xff0c;开发便捷。 环境配置 安装langchain框架 pip install langchain langchain-community 其中…...