码迷,mamicode.com
首页 > 数据库 > 详细

在Sql Server中实现分组排名

时间:2014-12-19 11:40:18      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   ar   io   sp   on   div   art   

比如我们有这样一个表,表名是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


这并不是我们想要的结果,因为数学和语文在一起排名是没有任何意义的。要实现每个科目内的排名,沈阳463整形医院程序给我们的建议就是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


这个就是我们想要的结果了。

在Sql Server中实现分组排名

标签:des   style   http   ar   io   sp   on   div   art   

原文地址:http://www.cnblogs.com/chaorenman/p/4173379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!