值表达式
值表达式(Value expression)可用于多种情况,例如用在 SELECT
命令的目标列表中,或用作 INSERT
或 UPDATE
中的新列值,又或用在命令的搜索条件中。值表达式的结果有时称为标量,以区别于表表达式的结果(其结果为一个表)。
聚合表达式
聚合表达式即对查询所选行应用聚合函数。
聚合表达式的支持句法有以下几种:
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_name
是 Aggregate functions 中列出的聚合函数之一,而 expression
是不包含聚合表达式或窗口函数调用的值表达式。
在 RisingWave 中,DISTINCT
关键字只有第二种形式,不能与 ORDER BY
或 WITHIN 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]);