窗口函数 RANK

最近一直在了解与学习sqlserver 窗口函数的各种知识,发现窗口函数能够很方便实现在之前可能需要关联子查询等一些复杂的逻辑才能实现的逻辑,下边是自己的一些学习笔记。

 

RANK函数:从小到大,每次最苦逼的就是考试了,肿么都会有一个结果排名,张三数学第一,李四、小明并列第二...。这应该是我们最早接触到的排名概念,sqlserver 中rank 也是这样的意思,和row_number() 区别就是rownum会为每个分区值相同的去一个随机排名,即排名不会存在并列的情况

 

创建一个数据表:包含班级编号、课程编号、学生编号、学生成绩(T_StudentGrade  ClassId ,CourseId ,StudentId ,SGrade )

 

1:获得每个班级,每门课程同学们的成绩排名情况(成绩相同,并列排名)

1 SELECT  id ,
2         ClassId ,
3         CourseId ,
4         StudentId ,
5         SGrade ,
6         RANK() OVER ( PARTITION BY ClassId, CourseId ORDER BY SGrade DESC ) AS rownum
7 FROM    dbo.T_StudentGrade;
View Code

 

2:获得每门课程的排名前三学生情况

1 WITH tmpTable AS (
2 SELECT  id ,
3         ClassId ,
4         CourseId ,
5         StudentId ,
6         SGrade ,
7         RANK() OVER ( PARTITION BY CourseId ORDER BY SGrade DESC ) AS ScoreRank
8 FROM    dbo.T_StudentGrade)
9 SELECT * FROM tmpTable WHERE tmpTable.ScoreRank<4
View Code

 

转载于:https://www.cnblogs.com/wawa0210/p/6057871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值