Skip to main content

值表达式

值表达式(Value expression)可用于多种情况,例如用在 SELECT 命令的目标列表中,或用作 INSERTUPDATE 中的新列值,又或用在命令的搜索条件中。值表达式的结果有时称为标量,以区别于表表达式的结果(其结果为一个表)。

聚合表达式

聚合表达式即对查询所选行应用聚合函数。

聚合表达式的支持句法有以下几种:

aggregate_name (expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name (DISTINCT expression [ , ... ] [ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( * ) [ FILTER ( WHERE filter_clause ) ]
aggregate_name ( [ expression [ , ... ] ] ) WITHIN GROUP ( order_by_clause ) [ FILTER ( WHERE filter_clause ) ]

其中 aggregate_nameAggregate functions 中列出的聚合函数之一,而 expression 是不包含聚合表达式或窗口函数调用的值表达式。

在 RisingWave 中,DISTINCT 关键字只有第二种形式,不能与 ORDER BYWITHIN GROUP 子句一起使用。此外,值得注意的是,order_by_clause 在第一种和第四种形式中的位置不同。

行构造器

行构造器是一种使用其成员字段的值构建行值的表达式。

ROW([expression][,...])

示例

以下两个语句可创建一个表并向表中添加值。

CREATE TABLE t (v1 int, v2 int);
INSERT INTO t VALUES (1,12), (2,13), (3,30);

语句中的行构造返回表 t 中所有行的行值 (,)

SELECT row (v1, v2*2) AS demo FROM t;
  demo  
--------
(1,24)
(2,26)
(3,60)
(3 rows)

数组构造器

数组构造器是一种从一组值创建数组的表达式。

数组可以使用以下句法构造。

ARRAY [expression1, expression2, ...]

例如:

SELECT ARRAY[1, 2, 3*4];
----------
{1,2,12}
(1 row)

数组构造器可以嵌套在另一个数组构造器中。例如:

SELECT ARRAY[ARRAY[1, 2], ARRAY[3, 4]];
----------
{{1,2},{3,4}}
(1 row)

对于嵌套的数组构造器,不能省略 ARRAY。以下语句无法解析。

SELECT ARRAY[[1,2], [3,4]];

创建表时,使用方括号定义数组。例如:

CREATE TABLE (f1 INT[], f2 INT[]);

INSERT INTO arr VALUES (ARRAY[1,2], ARRAY[3,4]);