更新时间: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的行。 |
父主题: 运算符