partition by關(guān)鍵字是分析性函數(shù)的一部分歧蕉,它和聚合函數(shù)不同的地方在于它能返回一個分組中的多條記錄,而聚合函數(shù)一般只有一條反映統(tǒng)計值的記錄珊佣,partition by用于給結(jié)果集分組蹋宦,如果沒有指定那么它把整個結(jié)果集作為一個分組,分區(qū)函數(shù)一般與排名函數(shù)一起使用咒锻。
準(zhǔn)備測試數(shù)據(jù):
create table Student --學(xué)生成績表
(
id int,? --主鍵
Grade int, --班級
Score int --分?jǐn)?shù)
)
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)
一冷冗、分區(qū)函數(shù)Partition By的與row_number()的用法
1、不分班按學(xué)生成績排名
select*,row_number()over(orderbyScoredesc)asSequencefromStudent
執(zhí)行結(jié)果:
2惑艇、分班后按學(xué)生成績排名
select*,row_number()over(partitionbyGradeorderbyScoredesc)asSequencefromStudent
執(zhí)行結(jié)果:
3蒿辙、獲取每個班的前1(幾)名
select*from(select*,row_number()over(partitionbyGradeorderbyScoredesc)asSequencefrom Student
)T whereT.Sequence<=1
執(zhí)行結(jié)果:
二拇泛、分區(qū)函數(shù)Partition By與排序rank()的用法
1、分班后按學(xué)生成績排名 該語句是對分?jǐn)?shù)相同的記錄進(jìn)行了同一排名思灌,例如:兩個80分的并列第2名俺叭,第4名就沒有了
select*,rank()over(partitionbyGradeorderbyScoredesc)asSequencefromStudent
執(zhí)行結(jié)果:
2、獲取每個班的前2(幾)名 該語句是對分?jǐn)?shù)相同的記錄進(jìn)行了同一排名泰偿,例如:兩個80分的并列第2名熄守,第4名就沒有了
select*from(select*,rank()over(partitionbyGradeorderbyScoredesc)asSequencefrom Student
)T whereT.Sequence<=2
執(zhí)行結(jié)果:
分類:?SQL Server
原文來自:https://www.cnblogs.com/linJie1930906722/p/6036053.html