rank over(partition by 列名1,order by 列名2)
临时生成的表中所含的字段根据子查询得到
根据列名1分组结果集,根据列名2对结果集进行排序
表示根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函数计算的值就表示每组内部排序后的顺序编号,可以用于去重复值
partition by用于给结果集分组。
rank在每个分组内进行排名。
1.Mysql高级函数rank over
实例
临时生成的表中所含的字段根据子查询得到,并且子查询中所定义的别名和参数(别参)在子查询外能被使用
select name,age from
(select pid,name,age,rank() over(partition by name, order by age asc) as rank_num
from student) as rank_table //临时表rank_table
where rank_num= 10;
实例剖析
1.首先执行内部子查询,行成一个结果集作为临时表 rank_table,临时生成的表中所含的字段根据子查询得到
(select pid,name,age,rank() over(partition by name, order by age asc) as rank_num
from student) as rank_table
2.注意其中1中 rank() over(partition by name, order by age asc)
对查询的结果首先按照name进行排序,其次对结果集根据age进行排序
3.然后对结果集的临时表rank_table进行查询
select name,age from rank_table where rank_num= 10;
2.Mysql高级函数dense_rank over
dense_rank() over()
与rank() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。
dense_rank() over(partition by subject order by score desc) rank
3.Mysql高级函数row_num over
4.区分rank() over()
结合一下这位同志的区分条件
待更新。。。。。。。
1.mysql中使用order by 排序时使用if()函数应用场景。
2.mysql order by if函数_mysql排序之ORDER BY IF、ORDER BY配合IN、TIMESTAMPDIFF、TIMESTAMPADD、FIELD…
后期有时间继续更新其他rank 函数。。。。。。别忘提醒
本文深入讲解MySQL中的rank(), dense_rank()及row_number()等高级函数的用法与区别,通过具体实例展示了如何根据指定列进行分组排序,适用于去除重复记录、排名等多种场景。
1640

被折叠的 条评论
为什么被折叠?



