DENSE_RANK()函数详解:MySQL与Hive中的分组排序实战
创作时间:
作者:
@小白创作中心
DENSE_RANK()函数详解:MySQL与Hive中的分组排序实战
引用
CSDN
1.
https://m.blog.csdn.net/weixin_49114503/article/details/143233557
在数据库查询中,排名函数是数据分析中非常重要的工具。其中,DENSE_RANK()函数因其独特的排名方式,在处理重复值时具有明显优势。本文将详细介绍DENSE_RANK()函数的使用方法,并通过具体案例展示其在MySQL和Hive中的应用。
一、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 dr
from `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() 是非常有用的工具。它们可以帮助用户快速对数据进行排名和分类分析。虽然这三种函数的作用相似,但因其在处理重复值时的行为不同,所以在使用时需要根据具体需求进行选择。
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, … |
热门推荐
《似锦》:曹兴昱的恶行与成长,一个复杂反派的诞生
夏天喝白茶,好处多多,但要注意4点,尤其是第3点
豆瓣上找房的技巧如何?这种找房技巧对租房者有哪些实际帮助?
EHR人力资源管理软件的下载过程和注意事项是啥?
现值法定义及应用
山西十大名小吃:从宫廷御膳到民间美味
在中国第一面食大省山西过年,有1000种花式碳水美食让人上头
民事起诉状目的与特点分析
在问答环节中保持势头的5个技巧
解密深海“黑科技”永福吸力锚方案,助力海上巨人稳立蓝海
高速直流12v电机,了解高速直流电机的特点和应用
笔记本6200u配置全面评测:i5-6200u处理器性能与特点详解
如何组建人工智能电脑
视频号运营规则详解:让运营更规范
从小说到动画的成功改编:解析《牧神记》IP的多元化发展
掌握Excel求和:从基础SUM到高级SUMPRODUCT详解
全网粉丝过百万,视频掀起亿级“播”澜!江门这个“顶流”主播的励志故事真精彩!
一起Night Walk!西宁这些地方藏不住了
实用新型专利申请需要多少时间?
如何看待本轮长期国债利率上行?
驯服的根源——从儒家思想看古代统治的心理塑造
高等教育中独立学院的中外合作办学论文
好主人细心时刻:关于狗狗饮食,以下四点要注意
月球科学知识
全国公证员资格考试:权威解析及报考指南
烟草替代品安全性评价-深度研究
【红色记忆】60年,我们的攀枝花
PySide6 GUI 编程:基础部分小结之常用组件类
叶黄素食物:五大类食物助力补充叶黄素
万亿蓝海争夺战:中美日韩动力电池技术路线图全解析!