RETURN¶
RETURN语句用于选择输出列,或在输出前完成聚合计算。
语法¶
- return_statement
return_statement ::=
'RETURN' ( 'ALL' | 'DISTINCT' )? ( ( (value_expression ('AS' identifier)? ) ( ',' (value_expression ('AS' identifier)? ) )* )
| '*' ) group_by_clause?
参数¶
ALL | DISTINCT¶
处理结果中重复行的方法。支持以下方法:
ALL:默认方法,返回所有行,不去除重复行。DISTINCT:去除返回结果中的重复行。
value_expression¶
计算结果为待返回的值或常量的值表达式。有关值表达式类型的更多信息,请参见值表达式。
若至少有一个值表达式设置为聚合表达式,RETURN语句将执行聚合操作及选择操作;否则,RETURN语句仅执行选择操作。
identifier¶
待返回的字段的别名。该别名必须为标识符。有关标识符的更多信息,请参见标识符命名规则。
group_by_clause¶
用于指定分组时使用的一组分组键的子句。分组键是用于确定如何对结果集进行分组的列或表达式。更多信息,请参见 GROUP BY 子句。
group_by_clause仅在至少有一个value_expression被设置为聚合表达式时才能使用。此时,RETURN语句中的返回项分为以下三类:
- 聚合返回项:包含一个聚合表达式且其别名未作为分组键包含在
group_by_clause中的返回项。 - 分组返回项:其别名在
group_by_clause中用作分组键的返回项。 - 函数分组返回项:函数上依赖于任意分组返回项且其别名在
group_by_clause中用作分组键的返回项。例如,SUM(v.age)函数上依赖于v.age;SUM(v.age)和v.age函数上依赖于v。
group_by_clause中的分组键可以是任何可见变量。但是,以下规则适用于分组键:
- 分组返回项及其函数分组返回项不能同时用作分组键。
- 如果一个分组返回项有多个函数分组返回项,则这些函数分组项中只能有一个用作分组键。
若至少有一个value_expression被设置为聚合表达式,但没有指定group_by_clause,将执行隐式聚合。此时,结果集将自动按照所有非聚合返回项进行分组。若未指定非聚合返回项,则整个结果集将视为单个组,等同于GROUP BY ()。
*¶
返回所有结果。group_by_clause不能跟在*之后添加。
示例¶
返回并重命名列¶
'''
FOR i IN LIST[1, 2, 3]
RETURN i AS num, i * i AS square
ORDER BY num
'''
返回:
+-----+--------+
| num | square |
+-----+--------+
| 1 | 1 |
| 2 | 4 |
| 3 | 9 |
+-----+--------+
返回去重结果¶
'''
FOR i IN LIST[1, 1, 2, 2, 3]
RETURN DISTINCT i AS num
ORDER BY num
'''
返回:
+-----+
| num |
+-----+
| 1 |
| 2 |
| 3 |
+-----+
执行聚合¶
'''
FOR i IN LIST[1, 1, 2, 3, 3, 3]
RETURN i AS num, count(*) AS cnt
GROUP BY num
ORDER BY num
'''
返回:
+-----+-----+
| num | cnt |
+-----+-----+
| 1 | 2 |
| 2 | 1 |
| 3 | 3 |
+-----+-----+
使用*返回当前结果集的全部列¶
'''
TABLE t TYPED TABLE {id INT, name STRING} =
(1, "A"),
(2, "B")
FOR r IN t
RETURN *
'''
返回:
+---------------+
| r |
+---------------+
| {id:1,name:A} |
| {id:2,name:B} |
+---------------+
返回当前结果集的指定列¶
'''
TABLE t TYPED TABLE {id INT, name STRING} =
(1, "A"),
(2, "B")
FOR r IN t
RETURN r.id, r.name
'''
返回:
+------+--------+
| r.id | r.name |
+------+--------+
| 1 | A |
| 2 | B |
+------+--------+