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, … |
热门推荐
括号使用误区,你中枪了吗?
金毛犬食欲不振怎么办?8大原因+6大解决方案全解析
养狗必读:六大要点打造健康快乐的宠物生活
古人驯狗不是为了吃:从狼到人类伙伴的演变史
浮小麦:淘洗时浮起的小麦,专治自汗盗汗
中国古代行省制度:加强中央集权的地方治理模式
如何拆卸北斗星汽车的起动机?
昌河铃木北斗星电路故障的修复方法及常见故障排查
吕雉、武则天、慈禧:封建社会的三位女政治家
客家菜:以“肥咸熟”为特色的岭南传统菜系
岭南首邑河源:客家文化传承引领高质量发展
川菜:从秦汉发源到抗战融合的千年传承
截瘫患者需要在饮食上忌口什么?
脊髓电刺激+外骨骼机器人,让截瘫患者重拾行走的希望
智慧油田:推动能源领域数字化转型的新引擎
数智变革,打造油田生产指挥新模式
运用偏差值分析,提高福彩3D中奖概率
新手必读:运用数学方法提高福彩3D中奖率
《蛟龙行动》抵制风波,张涵予回应来了?
电瓶并联,小心操作变“烟花秀”
汽车电池并联,你真的懂吗?
如何优化在房产市场中的投资策略?这种策略如何根据市场变化进行调整?
快递没收到却显示已签收怎么办?去哪里投诉?
快递没收到却显示已签收怎么办?去哪里投诉?
补益肝肾的山萸肉:功效、禁忌与食用指南
芥菜养生新潮流:从中医功效到食疗应用
芥菜清热解毒,秋冬必备防感冒神器
北极变暖致因纽特人困境:27%迁居城市,69.3%年收入不足2万加币
复旦研究揭示乌灵胶囊抗抑郁机制:调控Nesfatin-1/NF-κB通路
乌灵菌粉:含20%多糖,每日2-3克提升免疫力