mysql窗口函数rank() over、dense_rank() over、row_number() over 实现分组排行

news/2025/1/15 3:39:43/

在做导出时,遇到一个根据价格最低数统计,所以用到了序号排行,数据库用的8.0.33;

正好mysql 8.0以上版本支持窗口函数

总结一下几种函数:

1、row_number()

row_number()over(partition by字段1 order by 字段2) 的结果是每一行记录生成一个序号,依次排序且排序的序号不会重复

2、rank()

rank()over(partition by字段1 order by 字段2) 的结果会考虑排序字段值相同的情况,若排序字段的值相同则其序号是一样的,后续不同字段值的序号为(前一行序号+N,其中N为前一个字段值重复的行数),比如 1 1 3 4 4 4 7。**

3、dense_rank()

dense_rank()over(partition by字段1 order by 字段2) 的结果也会考虑排序字段值相同的情况,即排序字段的值相同那么他们的序号是一样的,但是与rank()****的区别是后续不同字段值的序号为(前一行序号+1),比如 1 1 2 2 3 4 5

根据价格进行序号排行

#row_number() over()使用

	SELECTclassify_code as '材料code', price_after_tax as '价格排名列',row_number() OVER ( PARTITION BY classify_code ORDER BY classify_code, price_after_tax ) AS '排行序号' FROMpurchase_project_op_material WHEREpurchase_project_id = 1878637071744167937 AND type = 1 

#执行结果:

#rank() over()使用

SELECTclassify_code as '材料code', price_after_tax as '价格排名列',rank() OVER ( PARTITION BY classify_code ORDER BY classify_code, price_after_tax ) AS '排行序号' FROMpurchase_project_op_material WHEREpurchase_project_id = 1878637071744167937 AND type = 1 

#执行结果

#dense_rank() over()使用

SELECTclassify_code as '材料code', price_after_tax as '价格排名列',dense_rank() OVER ( PARTITION BY classify_code ORDER BY classify_code, price_after_tax ) AS '排行序号' FROMpurchase_project_op_material WHEREpurchase_project_id = 1878637071744167937 AND type = 1 

#执行结果

最后注意:

over(partition by字段1 order by 字段2)中的partition by 字段1 是可以省略的但是order by 字段2 不可省略


http://www.ppmy.cn/news/1563212.html

相关文章

MyBatis 性能优化

1. 引言 1.1 什么是 MyBatis? MyBatis 是一款流行的 Java 持久层框架,能够将 Java 对象与 SQL 数据库映射起来。与传统的 JDBC 不同,MyBatis 提供了灵活的 SQL 映射功能,使开发者可以专注于业务逻辑,而无需编写冗长的…

21天学通C++第八章——指针

C虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。 常见指针错误 内存泄漏 解释: 在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。 即如何理解&a…

苹果电脑怎么清理后台,提升苹果电脑运行速度

苹果电脑以其流畅的系统和高效的性能备受用户青睐,但即使是性能强大的Mac,随着使用时间的增长,也会遇到运行变慢、卡顿的问题。造成这种现象的一个主要原因是后台运行的程序和进程过多,占用了系统资源。那么,苹果电脑怎…

【C语言】标准IO

目录 1. 什么是标准IO 1.1概念 1.2特点 1.3 操作 2. 缓存区 3. 函数接口 3.1打开文件fopen 3.2关闭文件 3.3读写文件操作 3.3.1每次读写一个字符:fgetc()、fputc() a. 针对文件 b. 针对终端 3.3.2 每次一串字符的读写fgets()和fputs() c. 针对终端 d…

Spring Cloud Alibaba - Nacos理论面试总结-未完结

临时实例和永久实例 临时实例和永久实例在 Nacos 中是一个非常非常重要的概念 之所以说它重要,主要是因为我在读源码的时候发现,临时实例和永久实例在底层的许多实现机制是完全不同的 临时实例 临时实例在注册到注册中心之后仅仅只保存在服务端内部一…

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目,前提是已经安装配置好Maven环境。如还未配置安装Maven的,请先下载安装。如何下载安装,可参考我另外篇文章:maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…

JS点击对应复选框,对应内容区域隐藏

如果页面上的内容是正常显示的&#xff0c;则复选框默认勾选 点击复选框之后对应的区域就会隐藏 <div class"setting"><img src"./img/setting.png" alt""><div class"setBox"><label for"idBox" styl…