MySQL之dense_rank()分组排序函数的使用 |
||||||||||||
DENSE_RANK()是一种窗口函数,用于在数据库中计算密集等级 。它为每个行分配一个密集等级,并根据指定的排序顺序进行排列 。比如:如果有两个排名为1的值,接下来的值将会被标记为2,而不是3 。 一、dense_rank() 函数DENSE_RANK() 也是一个窗口函数,用于为结果集中的每一行分配排名 。DENSE_RANK() 在遇到相同的排序值时,会为相同的行分配相同的排名,并且下一个排名不会跳过 。换句话说,如果有两个排名为1的值,接下来的值将会被标记为2,而不是3 。 语法结构: DENSE_RANK() OVER ( PARTITION BY <expression>[{,<expression>...}] ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )
注意,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`; 两个并列第一名后,下一个是第二名,不会跳过排名 。
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() over (partition by 分组列 order by 排序列 desc)、row_number() 函数、分组排序函数》、《数据库rank()分组排序函数详解》、《row_number()、rank() 和 dense_rank() 的区别、分组排序函数》 到此这篇关于MySQL之dense_rank()分组排序函数的使用的文章就介绍到这了,更多相关MySQL dense_rank()分组排序内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |