sql 分组后排名,ROW_NUMBER()OVER()函数的使用
2015-04-14 13:46
274 查看
比如我们有这样一个表,表名是table1,这个表里面存储了某班同学中考所有的科目成绩,假设如下:
这时候,老师要求查出每个科目同学的成绩排名,排名函数之前我们用的最多的就是row_number() over()了。但在默认情况下,这个排名函数是不分科目的,也就是不分组的,它会把所有的成绩按照高或低进行排名
select table1.* ,ROW_NUMBER()OVER(ORDER BY [分数] desc) as id
from [table1] ORDER BY [课程]
执行得到的查询结果如下:
这并不是我们想要的结果,因为数学和语文在一起排名是没有任何意义的。要实现每个科目内的排名,我们就要在row_number() over()中用到PARTITION BY关键字了,PARTITION BY的作用就是根据指定的某个列对结果集先进行分组,再排名,比如我们这个例子中需要对课程进行分组,那么就是PARTITION BY [课程],全部的sql如下:
select table1.* ,ROW_NUMBER()OVER(PARTITION BY [课程] ORDER BY [分数] desc) as id
from [table1] ORDER BY [课程]
执行得到的查询结果如下:
这个就是我们想要的结果了。
姓名 | 科目 | 分数 |
李四 | 数学 | 100 |
李四 | 语文 | 85 |
张三 | 数学 | 95 |
张三 | 语文 | 90 |
select table1.* ,ROW_NUMBER()OVER(ORDER BY [分数] desc) as id
from [table1] ORDER BY [课程]
执行得到的查询结果如下:
姓名 | 科目 | 分数 | 排名 |
李四 | 数学 | 100 | 1 |
张三 | 数学 | 95 | 2 |
张三 | 语文 | 90 | 3 |
李四 | 语文 | 85 | 4 |
select table1.* ,ROW_NUMBER()OVER(PARTITION BY [课程] ORDER BY [分数] desc) as id
from [table1] ORDER BY [课程]
执行得到的查询结果如下:
姓名 | 科目 | 分数 | 排名 |
李四 | 数学 | 100 | 1 |
张三 | 数学 | 95 | 2 |
张三 | 语文 | 90 | 1 |
李四 | 语文 | 85 | 2 |
相关文章推荐
- sql "ROW_NUMBER() OVER()"函数,编号,分组,分页
- 使用分析函数为记录进行分组排名(rank, dense_rank, row_number)——分析函数2
- SQL 分组后返回序号(ROW_NUMBER () OVER(PARTITION BY order_no ORDER BY START_Time ASC 的使用方法)
- sql 排名函数 rank() , row_number() , dense_rank() over
- SQL-OVER与四种排名函数:ROW_NUMBER(),RANK(),DENSE_RANK(),NTILE()
- SQL 函数之 row_number() over()
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- SQL server ROW_NUMBER()函数使用
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- SQL Server2005使用ROW_NUMBER() OVER实现按分组查询Count()数量排序并分页
- sql开窗函数 row_number () over(order by id )
- SQLServer中Partition By及row_number 函数使用详解
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
- SQL关于分页的sql查询语句 limit 和row_number() OVER函数
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较