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

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



