
# 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.00..2.50 rows=150 width=4)
   Filter: (ROWNUM > 10)
   ->  Seq Scan on t1  (cost=0.00..2.50 rows=150 width=4)
(3 rows)
--删除。
gaussdb=# DROP TABLE t1;
```
上述示例中，Rownum算子输出信息如下所示。
| 信息名称   | 含义                                                    |
|:---|:---|
| Rownum | 算子的名称。                                                |
| Filter | 过滤的rownum的谓词，示例中的ROWNUM \> 10表示，过滤的条件为显示rownum大于10的行。 |
   
