Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/return/ Documentation version: v5.3.2 # 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` 计算结果为待返回的值或常量的值表达式。有关值表达式类型的更多信息,请参见[值表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/#_6)。 若至少有一个值表达式设置为[聚合表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/aggregate/),`RETURN`语句将执行聚合操作及选择操作;否则,`RETURN`语句仅执行选择操作。 ### `identifier` 待返回的字段的别名。该别名必须为标识符。有关标识符的更多信息,请参见[标识符命名规则](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/keywords-identifiers/)。 ### `group_by_clause` 用于指定分组时使用的一组分组键的子句。分组键是用于确定如何对结果集进行分组的列或表达式。更多信息,请参见 [GROUP BY](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/clauses/group-by/) 子句。 `group_by_clause`仅在至少有一个`value_expression`被设置为[聚合表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/aggregate/)时才能使用。此时,`RETURN`语句中的返回项分为以下三类: - 聚合返回项:包含一个聚合表达式且其别名未作为分组键包含在`group_by_clause`中的返回项。 - 分组返回项:其别名在`group_by_clause`中用作分组键的返回项。 - 函数分组返回项:[函数上依赖](https://zh.wikipedia.org/wiki/%E5%87%BD%E6%95%B0%E4%BE%9D%E8%B5%96)于任意分组返回项且其别名在`group_by_clause`中用作分组键的返回项。例如,`SUM(v.age)`函数上依赖于`v.age`;`SUM(v.age)`和`v.age`函数上依赖于`v`。 `group_by_clause`中的分组键可以是任何可见变量。但是,以下规则适用于分组键: - 分组返回项及其函数分组返回项不能同时用作分组键。 - 如果一个分组返回项有多个函数分组返回项,则这些函数分组项中只能有一个用作分组键。 若至少有一个`value_expression`被设置为[聚合表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/expressions/aggregate/),但没有指定`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 | +------+--------+ ````