跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

RETURN

RETURN语句用于选择输出列,或在输出前完成聚合计算。

语法

return_statement
RETURN ALL DISTINCT value_expression AS identifier , * group_by_clause

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      |
+------+--------+