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

MySQL:MySQL分组排序函数rank()、row_number()、dense_rank()与partition by结合使用

一、前言

  在 MySQL 中,虽然标准的 SQL 函数 RANK(), ROW_NUMBER(), 和 DENSE_RANK() 是 SQL 标准的一部分,但早期的 MySQL 版本并不直接支持这些窗口函数。然而,从 MySQL 8.0 开始,这些函数被引入以支持窗口函数(也称为分析函数或 OLAP 函数)。

二、示例

以下是这三个函数的简要说明和示例:

1.ROW_NUMBER()

  • 为结果集的每一行分配一个唯一的序号。
  • 即使两行有相同的值,它们也会被赋予不同的序号。
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) as rn  
FROM students;

这将按分数降序排列学生,并为每个学生分配一个唯一的序号。

2. RANK()

  • 为结果集的每一行分配一个排名。
  • 如果两行有相同的值,则它们具有相同的排名,并且下一个排名的数字会跳过这些重复的值。
SELECT name, score, RANK() OVER (ORDER BY score DESC) as rnk  
FROM students;

假设有两个学生都有 90 分的最高分,则它们的排名都是 1,而下一个学生的排名将是 3(跳过了 2)。

3. DENSE_RANK()

  • RANK() 类似,但它不会跳过任何排名数字。
  • 如果两行有相同的值,则它们具有相同的排名,但下一个排名的数字会紧接着前一个排名的数字。
SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) as drnk  
FROM students;

使用上面的示例,如果两个学生都有 90 分的最高分,则它们的排名都是 1,而下一个学生的排名将是 2(没有跳过 2)。

  在所有这些示例中,OVER (ORDER BY …) 子句定义了如何对结果集进行排序以确定排名或序号。你可以根据需要更改排序顺序(例如,按升序排序而不是降序排序)。

4. PARTITION BY

  PARTITION BY子句允许你将一个表(或查询结果集)的数据按照指定的列或表达式进行逻辑分组,这些逻辑分组被称为“分区”。每个分区内的数据在物理存储上可能是独立的,但逻辑上它们仍然属于同一张表。

  RANK(), ROW_NUMBER(), 和 DENSE_RANK() 窗口函数可以与 PARTITION BY 子句结合使用,以在每个分区内单独计算排名。

SELECT name, score, class,  ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) as row_num  
FROM students;

在这个例子中,我们按 class 分区,并在每个班级内按 score 降序为学生分配唯一的行号。

注意:

  • 使用rank over()的时候,空值是最大的,如果排序字段为null, 可能造成null字段排在最前面,影响排序结果。
  • 可以这样:rank() over(partition by class order by score desc nulls last)

总结:

  • 排名函数必须有 OVER 子句。

  • 排名函数必须有包含 ORDER BY 的 OVER 子句。

  • 分组内从1开始排序。

  • rank中空值是最大的,要用 nulls last进行调整。

相关文章:

MySQL:MySQL分组排序函数rank()、row_number()、dense_rank()与partition by结合使用

一、前言 在 MySQL 中,虽然标准的 SQL 函数 RANK(), ROW_NUMBER(), 和 DENSE_RANK() 是 SQL 标准的一部分,但早期的 MySQL 版本并不直接支持这些窗口函数。然而,从 MySQL 8.0 开始,这些函数被引入以支持窗口函数(也称为…...

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序,通过使用计算机视觉技术,能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV,实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…...

Python数据可视化基础:使用Matplotlib绘制图表

Python数据可视化基础:使用Matplotlib绘制图表 数据可视化是数据分析中的重要环节,它可以帮助我们更直观地理解数据。Python作为一门强大的编程语言,提供了多种库来支持数据可视化,其中Matplotlib是最为流行和功能丰富的库之一。…...

Java开发接口设计的原则

在现代软件开发实践中,接口设计扮演着至关重要的角色。它不仅关乎代码的结构和未来的可维护性,还直接影响到软件系统的灵活性和扩展性。本文将通过实例详解几个核心的接口设计原则,帮助开发者更好地编写和管理接口,从而提升软件的…...

[火灾警报系统]yolov5_7.0-pyside6火焰烟雾识别源码

国内每年都会发生大大小小的火灾,造成生命、财产的损失。但是很多火灾如果能够早期发现,并及时提供灭火措施,将会大大较小损失。本套源码采用yolov5-7.0目标检测算法结合pyside6可视化界面源码,当检测到火灾时,能否发出…...

机器学习和深度学习区别

定义和范围: 机器学习:是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改…...

【功能详解】银河麒麟操作系统“安全启动”是如何发挥作用的?

2023年12月,财政部、工信部发布了7项信息类产品《政府采购需求标准》,为包括操作系统在内多项产品的政府集中采购提供政策支撑。其中,安全、可信作为国产操作系统的基本要求备受关注。 安全体系的构建离不开操作系统本身的硬实力&#xff0c…...

关于多线程的理解

#系列文章 关于时间复杂度o(1), o(n), o(logn), o(nlogn)的理解 关于HashMap的哈希碰撞、拉链法和key的哈希函数设计 关于JVM内存模型和堆内存模型的理解 关于代理模式的理解 关于Mysql基本概念的理解 关于软件设计模式的理解 关于Redis知识的理解 文章目录 前言一、线程…...

C语言 | Leetcode C语言题解之第155题最小栈

题目: 题解: //单调栈 单调递减 typedef struct {//正常 stackint stack[10000];int stackTop;//辅助 stackint minStack[10000];int minStackTop; } MinStack;MinStack* minStackCreate() {MinStack* newStack (MinStack *) malloc(sizeof(MinS…...

Qdrant 的基础教程

目录 安装Qdrant安装Qdrant客户端初始化Qdrant客户端创建集合(Collection)插入向量数据创建索引搜索向量清理资源 Qdrant是一个开源的向量数据库,它专注于高维向量的快速相似性搜索。以下是一个基础的Qdrant教程,帮助你开始使用Qd…...

任务4.8.3 利用SparkSQL统计每日新增用户

实战概述:利用SparkSQL统计每日新增用户 任务背景 在大数据时代,快速准确地统计每日新增用户是数据分析和业务决策的重要部分。本任务旨在使用Apache SparkSQL处理用户访问历史数据,以统计每日新增用户数量。 任务目标 处理用户访问历史数…...

DS知识点总结--线性表定义及顺序表示

数据结构知识点汇总(考研C版) 文章目录 数据结构知识点汇总(考研C版)二、线性表2.1 线性表的定义和操作2.1.1 线性表的定义2.1.2 线性表的基本操作 2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表上的基本操作的实现 二、线性表 2.1 线性表的定义和操作 2.1.1 线性表的…...

百度文库AI产品“橙篇”:支持10万字长文生成,开启AI创作新篇章

6月19日,百度文库发布了一款创新产品「橙篇」,这一行业首创的产品集成了10万字长文生成及多模态编辑能力,成为首个实现「查阅创编」一站式AI自由创作平台的里程碑。 百度“橙篇”官网: 地址:橙篇AI - 用橙篇&#xf…...

wsl子系统ubuntu20.04 设置docker服务开机自启动

docker的重要性毋庸置疑。掌握虚拟化必备工具。windows台式机相信大家都有,那么开启windows的wsl子系统ubuntu来熟悉linux分布式开发就方便多了,用不着另购电脑。docker是在有限成本前提下尽可能多的尝试使用多OS、隔离物理环境影响的方便工具。下面就介…...

SAP ScreenPersonas

https://developers.sap.com/mission.screen-personas.html 跟着这个练习做一遍就了解了Personas 访问SAP提供的Personas练习系统 申请用户 登录练习系统 随便找一个可以支持Personas的程序搞起来,比如IW51 执行后等它出现这个图标就可以开始了....

充电学习—3、Uevent机制和其在android层的实现

sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs,userspace 可以主动去读写 kernel 的一些数据,同样的, kernel 也可以主动将一些“变化”告知给 userspace。也就是说,通过sysfs,userspace 和 ker…...

“河南省勘察设计资质整合趋势与企业应对“

"河南省勘察设计资质整合趋势与企业应对" 河南省勘察设计资质的整合趋势与企业应对策略可以从以下几个方面来分析: 整合趋势: 资质标准简化与合并:随着国家和地方政府深化“放管服”改革,勘察设计资质的管理趋向简化&…...

简单了解雪花算法

雪花算法是什么 不多解释。看一看 具体是怎么 生产 唯一ID 的。 ID 由多个数据组合拼接成64位,分别是 时间戳 服务器节点ID 序列号,每个数据项占的位数不固定,可以根据实际需求设置。首位 1 个二进制位 是 符号位。 public long allocate(l…...

决策树算法详细介绍原理和实现

决策树是一种常用的分类算法,它通过一系列的问题将数据分割成不同的分支,最终确定数据属于哪个类别。下面是决策树的原理、实现方式以及一个案例实现的详细介绍。 决策树原理 特征选择:决策树的构建过程首先需要选择一个特征作为节点&#…...

vue:vue2与vue3如何全局注册公共组件(包括涉及到的相关方法函数的讲解)

目录 第一章 vue2全局注册公共组件 1.1 方法一:逐个注册 1.2 方法二:批量注册 1.2.1 require.context()方法解释 第二章 vue3全局注册公共组件 1.1 方法一:逐个注册 1.2 方法二:批量注册 第一章 vue2全局注册公共组件 Vue…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...