在Sql Server中实现分组排名

Posted Cein

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Sql Server中实现分组排名相关的知识,希望对你有一定的参考价值。

 

 

比如我们有这样一个表,表名是table1,这个表里面存储了某班同学中考所有的科目成绩,

假设如下:

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

select * ,ROW_NUMBER()OVER(ORDER BY [分数] desc) as id 
from [table1] ORDER BY [课程]

执行得到的查询结果如下:

这并不是我们想要的结果,因为数学和语文在一起排名是没有任何意义的。要实现每个科目内的排名,我们就要在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 [课程]

执行得到的查询结果如下:

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

 

以上是关于在Sql Server中实现分组排名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL实现SQL Server排名函数

在SQL Server中实现关系模型

在 SQL Server 中实现一对零或一关系

有没有啥简单的方法可以在 Linq 中实现 SQL Server 的合并查询?

我应该如何在 SQL Server 2005 中实现“自动编号”字段?

在具有 Alwayson 设置的 SQL Server 中实现表分区