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进行调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入Android S (12.0) 探索Framework之输入子系统InputDispatcher的流程

Framework层之输入系统 第一篇 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动 第二篇 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程 第三篇 深入Android S (12.0) 探索Framework之输入子系统InputDispatcher的流程 文章目录 Framework层…

SMTP、POP3、IMAP4学习

文章目录 前言SMTPPOP3IMAP4区别与联系 前言 常见的邮件协议包括SMTP、POP3和IMAP4。这些协议都隶属于TCP/IP协议簇,属于应用层,分别通过TCP端口25、110和143建立连接。电子邮件的发送和接收过程依赖于这些协议。 SMTP (Simple Mail Trans…

数据标注-语音标注

声音是由物体振动产生的,通过介质传播到人耳中。 音高是指人听到的声音的高低,它与物体振动的频率成正比。物体振动的频率越快,我们听到的声音就越高;物体振动的频率越慢,我们听到的声音就越低。 音素是语言中声音的…

微信小程序-界面提示框和消息

一.Loading加载框 小程序提供了wx.showLoading用来在加载界面的时候使用,比如加载图片和数据的时候可以使用。 常常和wx.hideLoading()配合使用,否则加载框一直存在。 其效果如下: 代码如下: //显示加载消息wx.showLoading({//提…

【机器学习】Lasso回归:稀疏建模与特征选择的艺术

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Lasso回归:稀疏建模与特征选择的艺术引言一、Lasso回归简介1.1 基本…

Leetcode Java学习记录——代码随想录数组篇

因为是初学Java,刷题语言从Python切换过来有很多小习惯会出问题。 除此之外也算二刷代码随想录,仍有很多细节问题,特此记录。 文章目录 Java 易错点声明位运算lengthfor定义数组数组打印无穷大 二分法不变量 Java 易错点 声明 Java中变量需…

丰臣秀吉-读书笔记五

如今直面自己一生中的最高点,加之平日里的觉悟与希冀,此时此地他“一定要死得其所”。 “武士之道,便是在死的瞬间决定一生或华或实。一生谨慎、千锤百炼,如果在死亡这条路上一步走错,那么一生的言行便全部失去真意&am…

帕金森的锻炼方式

帕金森病,这个看似陌生的名词,其实离我们并不遥远。它是一种常见的神经系统疾病,影响着许多中老年人的生活质量。虽然帕金森病目前尚无根治之法,但通过科学合理的日常锻炼,可以有效缓解病情,提高生活质量。…

通用大模型与垂直大模型之争!

随着人工智能技术的飞速发展,大模型已经成为该领域的一个重要趋势。然而,通用大模型和垂直大模型在落地场景和应用上存在明显的差异,究竟谁能在这一领域中占据优势,成为了当前讨论的焦点。  通用大模型具有更广泛的应用场景&…

录的视频太大怎么压缩?这几款软件真的很不错!

在数字化时代,视频已成为我们日常生活和工作中不可或缺的一部分。无论是记录生活点滴,还是制作工作汇报,视频都以其直观、生动的特点赢得了我们的青睐。然而,随着视频质量的提升,视频文件的大小也在不断增加&#xff0…

内容安全复习 2 - 网络信息内容的获取与表示

文章目录 信息内容的获取网络信息内容的类型网络媒体信息获取方法 信息内容的表示视觉信息视觉特征表达文本特征表达音频特征表达 信息内容的获取 网络信息内容的类型 网络媒体信息 传统意义上的互联网网站公开发布信息,网络用户通常可以基于网络浏览器获得。网络…

API低代码平台介绍5-数据库记录修改功能

数据库记录修改功能 在上篇文章中我们介绍了如何插入数据库记录,本篇文章会沿用上篇文章的测试数据,介绍如何使用ADI平台定义一个修改目标数据库记录的接口,包括 单主键单表修改、复合主键单表修改、多表修改(整合前两者&#xff…

每日练题(py,c,cpp).6_19,6_20

检验素数 from math import sqrt a int(input("请输入一个数:")) for i in range(2,int(sqrt(a))):if a%i 0:print("该数不是素数")breakelse: print("该数是素数")# # 1既不是素数也不是合数 # #可以用flag做标志位 # b int(…

VUE element-ui之table表格横向展示(表尾汇总)_elementui横向表格

</el-table><section><el-table:show-header“false” :data“tableDataBll” border style“width: 100%;” <el-table-column prop"total" align"center" /><el-table-column prop"totalOrder" /><el-table-col…

视频智能分析平台智能边缘分析一体机安防监控平台打手机检测算法工作原理介绍

智能边缘分析一体机的打手机检测算法是一种集成了计算机视觉和人工智能技术的先进算法&#xff0c;专门用于实时监测和识别监控画面中的打手机行为。以下是关于该算法的详细介绍&#xff1a; 工作原理 1、视频流获取&#xff1a; 智能边缘分析一体机首先通过连接的视频监控设…

国内composer镜像有哪些

阿里云 Composer 全量镜像 镜像地址: https://mirrors.aliyun.com/composer/官方地址: https://mirrors.aliyun.com/composer/index.html镜像类型: 全量镜像更新时间: 1分钟备注: 阿里云CDN加速&#xff0c;更新速度快&#xff0c;推荐使用。腾讯云 Composer 全量镜像 镜像地址…

【UIDynamic-动力学-附着行为-刚性附着 Objective-C语言】

一、接下来,我们来说这个附着行为啊, 1.我们之前举过例子,一个车坏了,另外一个车,拉着这个车,就是附着行为啊, 这个里边呢,我们新建一个项目, Name:09-附着行为-刚性附着, 附着行为呢,分为两个大类: 1)刚性附着 2)弹性附着 刚性附着,指的就是,两个物体之间…

lftp工具速成

登录 lftp user:passwd192.168.0.123:21显示 ls设置本地目录 lcd /home/xxx/ftp下载 // 下载文件 get 1.log// 下载多个文件 mget *.log// 下载目录 mirror dir_name上传 // 下载文件 put 1.log// 下载多个文件 mput *.log// 下载目录 mirror -R dir_name退出 exit

三人同行免单模式:社交电商的新趋势

在当今社交电商日益繁荣的背景下&#xff0c;三人同行免单模式作为一种创新的购物激励机制&#xff0c;正逐渐受到消费者和品牌的青睐。该模式通过消费者之间的互动和分享&#xff0c;促进产品销售和品牌推广&#xff0c;实现消费者与品牌的双赢。 模式概述 三人同行免单模式的…

企业级WordPress开发 – 创建企业级网站的优秀技巧

目录 1 “企业级”一词是什么意思&#xff1f; 2 使用 WordPress 进行企业级 Web 开发有哪些好处&#xff1f; 3 使用 WordPress 进行企业级开发的主要好处 3.1 WordPress 可扩展、灵活且价格实惠 3.2 WordPress 提供响应式 Web 开发 3.3 WordPress 提供巨大的可扩展…