SQL中分区函数Partition By的与row_number()以及与排序rank()的用法详解

partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函数一般与排名函数一起使用。

准备测试数据:

create table Student --学生成绩表

(

id int,  --主键

Grade int, --班级

Score int --分数

)

go

insert into Student values(1,1,88)

insert into Student values(2,1,66)

insert into Student values(3,1,75)

insert into Student values(4,2,30)

insert into Student values(5,2,70)

insert into Student values(6,2,80)

insert into Student values(7,2,60)

insert into Student values(8,3,90)

insert into Student values(9,3,70)

insert into Student values(10,3,80)

insert into Student values(11,3,80)

一、分区函数Partition By的与row_number()的用法

1、不分班按学生成绩排名

select*,row_number()over(orderbyScoredesc)asSequencefromStudent

执行结果:

2、分班后按学生成绩排名

select*,row_number()over(partitionbyGradeorderbyScoredesc)asSequencefromStudent

执行结果:

3、获取每个班的前1(几)名

select*from(select*,row_number()over(partitionbyGradeorderbyScoredesc)asSequencefrom Student

)T whereT.Sequence<=1

执行结果:


二、分区函数Partition By与排序rank()的用法

1、分班后按学生成绩排名 该语句是对分数相同的记录进行了同一排名,例如:两个80分的并列第2名,第4名就没有了

select*,rank()over(partitionbyGradeorderbyScoredesc)asSequencefromStudent

执行结果:

2、获取每个班的前2(几)名 该语句是对分数相同的记录进行了同一排名,例如:两个80分的并列第2名,第4名就没有了

select*from(select*,rank()over(partitionbyGradeorderbyScoredesc)asSequencefrom Student

)T whereT.Sequence<=2

执行结果:


分类: SQL Server

原文来自:https://www.cnblogs.com/linJie1930906722/p/6036053.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容