|
一、概述
1、RANK
RANK返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。在排名中出现并列排名的情况时,会出现间断(跳跃)。
语法:ROW_NUMBER ( ) OVER ( [ ] )
< partition_by子句> 将 FROM 子句生成的结果集划分成 RANK 函数适用的分区。< order_by子句>确定将 RANK 值应用于分区中的行时所基于的顺序。当在排名函数中使用 时,不能用整数表示列。
2、DENSE_RANK
DENSE_RANK返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。
语法:DENSE_RANK ( ) OVER ( [ ] < order_by子句> )
将 FROM 子句生成的结果集划分为数个应用 DENSE_RANK 函数的分区。确定将 DENSE_RANK 值应用于分区中各行的顺序。整数不能表示排名函数中使用的 中的列。
3、NTILE
NTILE 将有序分区中的行分发到指定数目的组中。各个组有编号,编号从一开始。对于每一个行,NTILE 将返回此行所属的组的编号。
语法:NTILE (正整数常量表达式) OVER ( [ ] < order_by子句> )
正整数常量表达式,用于指定每个分区必须被划分成的组数,类型可以为 int 或 bigint。将 FROM 子句生成的结果集划分成 RANK 函数适用的分区。确定 NTILE 值分配到分区中各行的顺序。当在排名函数中使用 时,不能用整数表示列。
4、ROW_NUMBER
ROW_NUMBER返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
语法:ROW_NUMBER ( ) OVER ( [ ] )
将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。确定将 ROW_NUMBER 值分配给分区中的行的顺序。当在排名函数中使用 时,不能用整数表示列。
二、构建测试环境
CREATE TABLE [dbo].[StudentMarks](
[StudentCode] [varchar](10) NOT NULL,
[SubjectCode] [varchar](10) NOT NULL,
[Marks] [tinyint] NOT NULL,
CONSTRAINT [PK_StudentMarks] PRIMARY KEY CLUSTERED
([StudentCode] ASC, [SubjectCode] ASC) ON [PRIMARY]
) ON [PRIMARY]
declare @x tinyint,@y tinyint
set @x=0
while @x |
|
|