mysql高级函数rank 给结果集分组

本文深入讲解MySQL中的rank(), dense_rank()及row_number()等高级函数的用法与区别,通过具体实例展示了如何根据指定列进行分组排序,适用于去除重复记录、排名等多种场景。

rank over(partition by 列名1,order by 列名2)

临时生成的表中所含的字段根据子查询得到
根据列名1分组结果集,根据列名2对结果集进行排序
表示根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函数计算的值就表示每组内部排序后的顺序编号,可以用于去重复值
partition by用于给结果集分组。
rank在每个分组内进行排名。

实例

临时生成的表中所含的字段根据子查询得到,并且子查询中所定义的别名和参数(别参)在子查询外能被使用

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;

dense_rank() over()

与rank() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。
dense_rank() over(partition by subject order by score desc) rank

4.区分rank() over()
结合一下这位同志的区分条件

待更新。。。。。。。

1.mysql中使用order by 排序时使用if()函数应用场景。

2.mysql order by if函数_mysql排序之ORDER BY IF、ORDER BY配合IN、TIMESTAMPDIFF、TIMESTAMPADD、FIELD…

后期有时间继续更新其他rank 函数。。。。。。别忘提醒

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值