更新时间:2025-05-29 GMT+08:00

Rownum

算子说明

Rownum算子会生成伪列,它返回一个数字,表示从查询中获取结果的行编号。第一行的Rownum为1。可以使用Rownum关键字对查询结果的行编号进行条件过滤。通常出现在Rownum子句里。

使用Rownum有一定的约束条件:

  • Rownum不可作为别名,以免SQL语句出现歧义。
  • 创建索引时不可使用Rownum。
  • 创建表时默认值不可为Rownum。
  • Where子句中不可使用Rownum的别名。
  • 在插入数据时不可使用Rownum。
  • 在无表查询中不可以使用Rownum。
  • Rownum不能用于Limit子句。
  • Rownum不能用于EXECUTE语句的参数。
  • Upsert语句不支持Rownum用做Update子句更新。

典型场景

条件过滤语句中包含Rownum的过滤条件。

示例

示例:条件过滤语句中包含Rownum的过滤条件。

--数据准备。 
gaussdb=# CREATE TABLE t1 ( id INT , number INT );
CREATE TABLE
gaussdb=# INSERT INTo t1 VALUES(generate_series(1,50), 1);
INSERT 0 50
gaussdb=# INSERT INTO t1 VALUES(generate_series(1,50), 2);
INSERT 0 50 

--执行结果。 
gaussdb=# EXPLAIN SELECT t1.id FROM t1 WHERE rownum > 10;
                             QUERY PLAN
--------------------------------------------------------------------
 Rownum  (cost=0.81..14.35 rows=20 width=4)
   Filter: (ROWNUM > 10::numeric)
   ->  Streaming (type: GATHER)  (cost=0.81..14.35 rows=20 width=4)
         Node/s: All datanodes
         ->  Seq Scan on t1  (cost=0.00..13.13 rows=20 width=4)
(5 rows)
--删除。
gaussdb=# DROP TABLE t1;

上述示例中,Rownum算子输出信息如下所示。

信息名称

含义

Rownum

算子的名称。

Filter

过滤的rownum的谓词,示例中的ROWNUM > 10表示,过滤的条件为显示rownum大于10的行。