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项信息类产品《政府采购需求标准》,为包括操作系统在内多项产品的政府集中采购提供政策支撑。其中,安全、可信作为国产操作系统的基本要求备受关注。 安全体系的构建离不开操作系统本身的硬实力,…...
关于多线程的理解
#系列文章 关于时间复杂度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 - 用橙篇…...
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…...
告别杂乱农场:星露谷物语规划神器助你打造高效田园
告别杂乱农场:星露谷物语规划神器助你打造高效田园 【免费下载链接】stardewplanner Stardew Valley farm planner 项目地址: https://gitcode.com/gh_mirrors/st/stardewplanner 你是否曾在星露谷物语中面对一片荒地感到无从下手?种植区域混乱、…...
AceCommon:Arduino嵌入式零堆分配轻量C++工具库
1. AceCommon 库概述:面向嵌入式 Arduino 的轻量级底层工具集AceCommon 是一个专为资源受限的微控制器平台(尤其是 Arduino 生态)设计的零依赖、低开销 C 工具库。其核心设计哲学是“小而精、无侵入、可复用”。与常见的功能臃肿、依赖繁杂的…...
解锁AMD锐龙隐藏性能:SMUDebugTool深度调校实战指南
解锁AMD锐龙隐藏性能:SMUDebugTool深度调校实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitc…...
ViGEmBus虚拟控制器驱动完全指南:从设备模拟到多场景应用
ViGEmBus虚拟控制器驱动完全指南:从设备模拟到多场景应用 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 一、为什么需要虚拟控制器?…...
浅析Python中正则表达式的性能优化
在Python开发中,正则表达式是处理文本的利器,但如果使用不当,很容易成为性能瓶颈。尤其是在处理大文本或高频调用场景下,正则的执行效率直接影响整个程序的运行速度。本文将从正则匹配的底层逻辑出发,总结实用的性能优…...
YOLOv11目标检测与伏羲气象模型的融合应用:灾害天气图像识别预警
YOLOv11目标检测与伏羲气象模型的融合应用:灾害天气图像识别预警 最近几年,极端天气好像越来越频繁了。有时候,一场突如其来的暴雨或浓雾,就能让整个城市的交通陷入瘫痪,甚至带来不小的经济损失。传统的天气预报&…...
为什么AI Coding、Skills、Agent智能体都偏爱Markdown?
为什么AI Coding、Skills、Agent智能体都偏爱Markdown? 更多问题讨论和资料获取,请关注文章最后的微信公众号 从ChatGPT的输出到GitHub Copilot的提示,从Claude的记忆存储到智能体的工作流配置——Markdown无处不在。这不是巧合,…...
Polars 2.0内存优化实战:如何用lazy().collect()规避OOM,单机处理500GB脏数据?
第一章:Polars 2.0内存优化实战:如何用lazy().collect()规避OOM,单机处理500GB脏数据?在处理超大规模脏数据集时,传统 eager 模式极易触发 OOM(Out-of-Memory)错误。Polars 2.0 的 LazyFrame 提…...
如何通过Vial-QMK打造专属键盘体验:从入门到精通的个性化定制指南
如何通过Vial-QMK打造专属键盘体验:从入门到精通的个性化定制指南 【免费下载链接】vial-qmk QMK fork with Vial-specific features. 项目地址: https://gitcode.com/gh_mirrors/vi/vial-qmk 在数字化时代,键盘作为人与计算机交互的核心工具&…...
基于ANPC型三电平逆变器的VSG并网及参数自适应控制
ANPC虚拟同步机(VSG)并网(参数自适应控制),基于ANPC型三电平逆变器的参数自适应控制,采用电压电流双闭环控制,中点电位平衡控制,且实现VSG并网。 1.VSG参数自适应 2.VSG并网 3.提供相…...
