分组排序函数、dense_rank() 函数的使用、MySQL之dense_rank()、Hive之dense_rank()函数

news/2024/10/27 20:29:38/

文章目录

  • 一、dense_rank() 函数
  • 二、使用案例
    • 2.1、按成绩进行排名
    • 2.2、获取排名前五的数据
    • 2.3、分组后再排名
  • 三、总结
    • 3.1、row_number()、rank() 和 dense_rank() 的区别

DENSE_RANK()是一种窗口函数,用于在数据库中计算密集等级。它为每个行分配一个密集等级,并根据指定的排序顺序进行排列。比如:如果有两个排名为1的值,接下来的值将会被标记为2,而不是3。

dense_rank__6">一、dense_rank() 函数

DENSE_RANK() 也是一个窗口函数,用于为结果集中的每一行分配排名。DENSE_RANK() 在遇到相同的排序值时,会为相同的行分配相同的排名,并且下一个排名不会跳过。换句话说,如果有两个排名为1的值,接下来的值将会被标记为2,而不是3。

语法结构:

DENSE_RANK() OVER (PARTITION BY <expression>[{,<expression>...}]ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 
  • PARTITION BY:用于将结果集分区,针对每个分区单独排名。
  • ORDER BY:指定排序的列,决定了排名的依据。

注意,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。

二、使用案例

数据准备:

create table `student`(id int(10) not null primary key,name varchar(20) not null,score int(10) not null
);insert into `student` values(1,'a',100);
insert into `student` values(2,'b',100);
insert into `student` values(3,'c',95);
insert into `student` values(4,'d',95);
insert into `student` values(5,'e',95);
insert into `student` values(6,'a',90);
insert into `student` values(7,'a',89);

表数据:

在这里插入图片描述

2.1、按成绩进行排名

select *,dense_rank() over(order by score desc) as dr from `student`;

两个并列第一名后,下一个是第二名,不会跳过排名。
在这里插入图片描述

上图中over中没有使用partition进行分组,默认都是同一组

2.2、获取排名前五的数据

select * from (select name, score, dense_rank() over (order by score desc) as drfrom `student`
) a  where `dr` <=5;

在这里插入图片描述

2.3、分组后再排名

select name,score,dense_rank() over(partition by name order by score desc) as dr
from `student`;

首先,PARTITION BY子句按姓名将结果集分成多个分区。

然后,ORDER BY子句按分数对结果集进行排序。
在这里插入图片描述

三、总结

在数据分析中,ROW_NUMBER()、RANK() 和 DENSE_RANK() 是非常有用的工具。它们可以帮助用户快速对数据进行排名和分类分析。虽然这三种函数的作用相似,但因其在处理重复值时的行为不同,所以在使用时需要根据具体需求进行选择。

dense_rank__86">3.1、row_number()、rank() 和 dense_rank() 的区别

  • ROW_NUMBER():为每一行分配唯一的行号,适合唯一标识需求。
  • RANK():为重复值分配相同的排名,并在后续排名中跳过名次,适合需要处理排名的场景。
  • DENSE_RANK():为重复值分配相同的排名,但不跳过名次,适合希望连续排名的场景。

下面表格总结了这三个函数的主要区别:

函数特点排名示例
ROW_NUMBER为每行分配唯一的数字1, 2, 3, 4, …
RANK相同的值共享相同的排名,排名会跳过数字1, 1, 3, 4, …
DENSE_RANK相同的值共享相同的排名,不跳过数字1, 1, 2, 3, …

具体请参考《row_number() over (partition by 分组列 order by 排序列 desc)、row_number() 函数、分组排序函数》、《数据库rank()分组排序函数详解》、《row_number()、rank() 和 dense_rank() 的区别、分组排序函数


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

相关文章

怎么用c++的fill函数?

功能描述&#xff1a; 向容器中填充指定的元素 函数原型&#xff1a;fill(iterator beg, iterator end, value); // 向容器中填充元素 // beg 开始迭代器 // end 结束迭代器 // value 填充的值 示例&#xff1a; #include <numeric> #include <vector> #inclu…

用Spring Boot实现的在线厨艺学习平台

1 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让时间变得更加地宝贵化&#xff0c;因为每天的…

从 Web2 到 Web3:区块链技术的演进与未来趋势

在互联网的发展历程中&#xff0c;我们正经历着从 Web2 向 Web3 的重大转变。这个转变的核心驱动力之一&#xff0c;便是区块链技术的不断演进。 Web2 时代&#xff0c;互联网上的社交媒体、在线购物、视频分享等平台蓬勃发展。用户可以便捷地获取信息、与他人交流互动&#x…

uniapp-components(封装组件)

<myitem></myitem> 在其他类里面这样调用。

AI Infra 如何打造?云轴科技ZStack在中国CID大会上主题演讲

10月19日&#xff0c;2024年“中国云计算基础架构开发者大会&#xff08;China Cloud Computing Infrastructure Developer Conference - 简称CID&#xff09;”在北京举办。大会聚集业界最前沿的云计算基础架构技术成果&#xff0c;覆盖主论坛与四大技术主题分论坛&#xff0c…

No.19 笔记 | WEB安全 - 任意文件操作详解 part 1

1. 任意文件上传漏洞基础 什么是文件上传功能? 在网站和应用中,我们经常会看到允许用户上传文件的功能,比如: 更换头像:让用户上传自己的照片作为头像发布图片:在社交媒体或论坛上传图片提交文档:在办公系统中上传Word、Excel等文档 这些都是常见的文件上传功能。 任意文…

深入探讨TCP/IP协议基础

在当今数字化的时代&#xff0c;计算机网络已经成为人们生活和工作中不可或缺的一部分。而 TCP/IP 协议作为计算机网络的核心协议&#xff0c;更是支撑着全球互联网的运行。本文将深入探讨常见的 TCP/IP 协议基础&#xff0c;带你了解计算机网络的奥秘。 一、计算机网络概述 计…

【Linux】-----进程控制

目录 一、进程终止 是什么? 终止的三种情况 终止的方式 ①return 退出 ②调用exit函数(库函数) ③调用_exit函数(系统调用) 二、进程等待 为什么要等&#xff1f; 等待方式 wait waitpid 获取子进程的status 方式一&#xff1a;位操作(麻烦) 方式二&#xff…