(十六)排序函数
/*排序在很多地方需要用到,需要对查询结果进行排序并且给出序号。比如:
1、 对某张表进行排序,序号需要递增不重复的
2、 对学生的成绩进行排序,得出名次,名次可以并列,但名次的序号是连续递增的
3、 在某些排序的情况下,需要跳空序号,虽然是并列*/
--row_number函数
--根据排序子句给出递增连续序号
--按照名称排序的顺序递增
select s.id,s.name,cid,c.name,row_number() over(order by c.name) as number from studentBB s,classes c where cid=c.id;
--rank函数函数
--根据排序子句给出递增的序号,但是存在并列并且跳空
--顺序递增
select id, name, rank() over(order by cid) as rank from studentB;
--跳过相同递增
select s.id, s.name, cid, c.name, rank() over(order by c.name) as rank
from studentB s, classes c where cid = c.id;
--dense_rank函数
--根据排序子句给出递增的序号,但是存在并列不跳空
--不跳过,直接递增
select s.id, s.name, cid, c.name, dense_rank() over(order by c.name) as dense
from studentB s, classes c where cid = c.id;
--partition by分组子句
--可以完成对分组的数据进行增加排序,partition by可以与以上三个函数联合使用。
--利用partition by按照班级名称分组,学生id排序
select s.id, s.name, cid, c.name, row_number() over(partition by c.name order by s.id) as rank
from studentB s, classes c where cid = c.id;
select s.id, s.name, cid, c.name, rank() over(partition by c.name order by s.id) as rank
from studentB s, classes c where cid = c.id;
select s.id, s.name, cid, c.name, dense_rank() over(partition by c.name order by s.id) as rank
from studentB s, classes c where cid = c.id;
--ntile平均排序函数
--将要排序的数据进行平分,然后按照等分排序。ntile中的参数代表分成多少等分。
select s.id, s.name, cid, c.name,
ntile(5) over(order by c.name) as ntile
from studentB s, classes c where cid = c.id;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了