MySQL row_number()函数,rank()函数和dense_rank()函数

2024-03-14 03:12

本文主要是介绍MySQL row_number()函数,rank()函数和dense_rank()函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从MySQL8.0开始引用row_number(), rank()函数和dense_rank()函数,也就是常见的窗口函数,三个函数都是一种用于计算排名的工具,它们根据指定的列对结果集进行排序,并为每一行分配一个排名值(1,2,3,...)。

函数区别点

1、row_number()函数不会跳过相同值排名,即常见顺序(1,2,3)

 适用场景:

  • 需要为每一行分配唯一的数字。
  • 不关心相同值的排名差异。

2、rank()函数会跳过相同值的排名,即使有相同的值也会分配相同的排名(1,1,3);

适用场景:

  • 需要考虑相同值的排名差异。
  • 希望在出现相同值时跳过下一级的排名。

3、dense_rank()函数不会跳过排名,即使有相同的值也会分配相同的排名(1,1,2);

适用场景:

  • 需要考虑相同值的排名差异。
  • 希望在出现相同值时不跳过下一级的排名。

函数语法

row_number()函数语法:

row_number() over (partition by expr,...[,expr_n]

                                order by expr [asc|desc],...[,expr_n]);

- partition by :可选部分,将结果集分成更小的集合,如果省略此部分,会将整个结果集视为一个分区。

- order by :必选部分,指定按照哪些列对行进行排序。

示例:为每个部门内的员工按照薪水排序

select department,employee_name,salary,row_number() over (partition by department order by salary) as '排名'
from employees;

rank()函数语法:

rank() over (order by column_name [asc|desc])

dense_rank函数语法:

dense_rank() over (order by column_name [asc|desc])

简单使用

假设有一个employee表,需要查询员工薪资排名

-- 使用row_number()函数
select name '姓名',salary '工资',row_number() over(order by salary desc) as '排名'
from `employees`;

-- rank()函数
select name '姓名',salary '工资',rank() over(order by salary desc) as '排名'
from `employees`;

-- dense_rank()函数
select name '姓名',salary '工资',dense_rank() over(order by salary desc) as '排名'
from `employees`;

这篇关于MySQL row_number()函数,rank()函数和dense_rank()函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807039

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID