欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

在Sql Server中实现分组排名

创建时间:2014年04月01日 10:13  阅读次数:(10886)
分享到:
比如我们有这样一个表,表名是table1,这个表里面存储了某班同学中考所有的科目成绩,假设如下:
姓名 科目 分数
李四 数学 100
李四 语文 85
张三 数学 95
张三 语文 90

这时候,老师要求查出每个科目同学的成绩排名,排名函数之前我们用的最多的就是row_number() over()了。但在默认情况下,这个排名函数是不分科目的,也就是不分组的,它会把所有的成绩按照高或低进行排名
select * ,ROW_NUMBER()OVER(ORDER BY [分数] desc) as id 
from [table1] ORDER BY [课程]

执行得到的查询结果如下:
姓名 科目 分数 排名
李四 数学 100 1
张三 数学 95 2
张三 语文 90 3
李四 语文 85 4

这并不是我们想要的结果,因为数学和语文在一起排名是没有任何意义的。要实现每个科目内的排名,我们就要在row_number() over()中用到PARTITION BY关键字了,PARTITION BY的作用就是根据指定的某个列对结果集先进行分组,再排名,比如我们这个例子中需要对课程进行分组,那么就是PARTITION BY [课程],全部的sql如下:
select * ,ROW_NUMBER()OVER(PARTITION BY [课程] ORDER BY [分数] desc) as id 
from [table1] ORDER BY [课程]

执行得到的查询结果如下:
姓名 科目 分数 排名
李四 数学 100 1
张三 数学 95 2
张三 语文 90 1
李四 语文 85 2

这个就是我们想要的结果了。eb?T陙馷剉s
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 9+11=? 的结果(结果是:20)
结  果: