MYSQL排名函数row_number/rank/dense_rank/order by () limit offset

本文深入解析SQL中的row_number(), rank(), dense_rank()等窗口函数的语法及应用,通过实例展示如何在不同场景下使用这些函数进行数据排名和处理,特别适用于数据库管理和数据分析领域的专业人士。

row_number()

语法:row_number()over(partition by order by)
结果:返回的是连续排名,如果有相同值,也会连续排名,出现同值不同排名,排名类似于编号

rank()

语法:rank()over(partition by order by)
结果:返回的是非连续排名,如果有相同值,排名会跳号,出现同值排名相同

dense_rank()

语法:dense_rank()over(partition by order by)
结果:返回的是连续排名,如果有相同值,也会连续排名,出现同值排名相同

order by () limit offset

语法:order by () limit offset
结果:返回的是连续的几行数据,比如7-8名,就是limit 2 offset 6,不能分组不能处理重复值。

子查询

语法:select distinct A from a where (select count(distinct A) from a where A>a.A)=N-1
结果:返回的是去除了重复值以后的第N名。

自连接

语法:select distinct a1.A from a1 join a2 on a1.A<=a2.A group by a1.A having count(distinct a2.A)=N
结果:返回的是去除了重复值以后的第N名。

select  student_no,course_no,score,row_number()over(partition by course_no order by score desc)
from score;

select  student_no,course_no,score,rank()over(partition by course_no order by score desc)
from score;

select  student_no,course_no,score,dense_rank()over(partition by course_no order by score desc)
from score;


select  student_no,course_no,score
from score
where course_no=00001
order by score limit 3 offset 1;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值