OLAP 编号函数表达式

OLAP 编号函数表达式为单个查询的结果集中的每一行返回一序列的编号。

OLAP 编号函数表达式是您可在 SELECT 语句的 Projection 列表中包括,或在 SELECT 语句的 ORDER BY 子句中包括的 OLAP window 表达式。

语法

OLAP OLAP window
编号函数的 OVER 子句

用法

对于同一函数,关键字 ROW_NUMBER 与 ROWNUMBER 是同义词。此编号函数就像是一个不要求 window ORDER 子句且不检查重复值的简化的 RANK 函数。ROW_NUMBER 函数往往为每一 OLAP window 分区中的每一行返回唯一的值。

ROW_NUMBER 函数不带参数,但您必须在 ROW_NUMBER(或 ROWNUMBER)关键字之后包括空的圆括号。

ROW_NUMBER 函数为每一 OLAP 分区中的每行返回一无符号整数。每一分区中的行编号的序列起始于 1,且每一后续的行增 1,不论 window 分区中连续的行是否有相同的或不同的列值。

如果未指定 window PARTITION 子句,则完整的结果集从 1 至 n 编号,此处,n 是查询或子查询返回的满足条件的行的数目。

OVER 子句为编号函数定义的 OLAP window 有此语法:
  • window PARTITION 子句是可选的。如果未指定,则编号函数的作用域为查询或子查询的整个结果集,而不是分区了的子集。
  • window ORDER 子句是可选的。如果未指定,则返回的行编号是基于在查询处理时这些行的缺省顺序。如果指定 window ORDER 子句,则 ORDER BY 规范决定行编号的分配。
  • 对于 OLAP 编号函数,不支持 window Frame 子句。

如果为 ROW_NUMBER 函数定义 OLAP window 的 OVER 子句省略 window PARTITION 子句和 window ORDER 子句,则您必须在 OVER 关键字之后包括空的圆括号。

示例:ROW_NUMBER 函数

下列查询通过不同的包类型(pkg_type)对产品表中的行进行分区,并为每一分区指定从 1 重新开始的行编号。

SELECT ROW_NUMBER() 
        OVER(PARTITION BY pkg_type ORDER BY prod_name)
        AS rownum, prod_name, pkg_type 
        FROM product;
        
        ROWNUM PROD_NAME                      PKG_TYPE            
        1 Aroma Sounds CD                Aroma designer box  
        2 Aroma Sounds Cassette          Aroma designer box  
        1 Christmas Sampler              Gift box            
        2 Coffee Sampler                 Gift box            
        3 Easter Sampler Basket          Gift box            
        4 Spice Sampler                  Gift box            
        5 Tea Sampler                    Gift box            
        1 Aroma Roma                     No pkg              
        2 Aroma baseball cap             No pkg              
        3 Aroma t-shirt                  No pkg              
        4 Assam Gold Blend               No pkg              
        5 Assam Grade A                  No pkg              
        6 Breakfast Blend                No pkg              
        7 Cafe Au Lait                   No pkg              
        8 Coffee Mug                     No pkg              
        9 Colombiano                     No pkg              
        10 Darjeeling Number 1            No pkg              
        11 Darjeeling Special             No pkg              
        12 Demitasse Ms                   No pkg              
        13 Earl Grey                      No pkg              
        ...
      

由于 window ORDER 子句指定 prod_name 列作为排序键,因此,在缺省的(ASC)顺序中,返回的行编号是基于产品名称的字母顺序。例如,在 "No pkg" 分区内,将三个 "Aroma" 产品编号为 1、2 和 3。(在缺省的 ASCII 顺序规则中大写字母排序在小写之上。)

1 请参阅 OLAP window 表达式的 OVER 子句