Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/set/ Documentation version: v5.3.2 # 变量操作 `SET`语句用于对变量执行赋值、聚合和函数调用等操作。 下表汇总了支持的操作以及操作对象。 | 操作 | 操作对象 | 赋值 | [原始值变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/value-variable/)、[聚合值变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/)和[活动集变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/active-set-variable/) | 聚合 | [聚合值变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/) | 函数调用 | 聚合值变量和表变量的成员函数 ## 语法 语法图源码 assignment_statement aggregation_statement function_call_statement ```` assignment_statement ::= 'SET' ( primitive_value_variable | aggregator_value_variable | active_set_variable ) '=' value_expression aggregation_statement ::= 'SET' aggregator_value_variable '+=' value_expression function_call_statement ::= 'SET' (aggregator_value_variable | table_variable) '.' member_function '(' ( argument (',' argument)* )? ')' ```` ## 参数 ### `primitive_value_variable` 待赋值的原始值变量,变量必须在使用之前定义。关于如何定义原始值变量,请参见[原始值变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/value-variable/)。 ### `aggregator_value_variable` 待赋值或聚合的聚合值变量,变量必须在使用之前定义。关于如何定义聚合值变量,请参见[聚合值变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/)。 当在聚合语句中使用时,点绑定聚合值变量支持以下两种引用语法: 1. `node_variable.@aggregator_value_variable_name`,其中`node_variable`是一个预先定义的变量,代表临时图中的某个点。 2. `NODE(primitive_value_variable).@aggregator_value_variable_name`,其中`primitive_value_variable`是一个类型为`INT`的原始值变量,取值为临时图中某个点的系统 ID。 当在其他语句中引用时,点绑定聚合值变量仅支持第一种引用语法。 ### `active_set_variable` 待赋值的活动集变量,变量必须在使用之前定义。关于如何定义活动集变量,请参见[活动集变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/active-set-variable/)。 ### `value_expression` 计算结果为值或常量的值表达式,该值或常量将被赋值或聚合到变量中。更多信息,请参见[值表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/#_6)。 值或常量的数据类型必须与变量所持有的值的数据类型兼容。 ### `table_variable` 待设置的表变量,变量必须在使用之前定义。关于如何定义表变量,请参见[表变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/table-variable/)。 ### `member_function`和`argument` 待调用的聚合值变量或表变量的成员函数及其参数。 下表列出了不同类型的变量支持的成员函数: | 变量类型 | 支持的成员函数 | [ListAgg](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/list_agg/) | `size()`和`clear()` | [SetAgg](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/set_agg/) | `size()`、`clear()`和`contains_key()` | [MapAgg](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/map_agg/) | `size()`、`clear()`、`contains_key()`和`get()` | [TopKAgg](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/agg/topk_agg/) | `size()`、`clear()`和`min()` | [表变量](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/variable-definition/table-variable/) | `clear()` 关于聚合值变量成员函数及其参数的更多信息,请参见相应的聚合值变量文档。 ## 示例 以下示例基于在 [CREATE TEMPORARY GRAPH](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/graph-projection/create/) 中创建的临时图`#movie_temporary_graph`。 ### 赋值示例 #### 为原始值变量赋值 ```` ''' USE #movie_temporary_graph { VALUE a INT = 1 VALUE b INT = 1 VALUE c INT = 1 SET a = a + 1 SET b = a + 2 SET c = b + 3 RETURN a, b, c } ''' ```` 返回: ```` +---+---+---+ | a | b | c | +---+---+---+ | 2 | 4 | 7 | +---+---+---+ ```` #### 为全局聚合值变量赋值 ```` ''' USE #movie_temporary_graph { VALUE a SumAgg = 0 VALUE b MaxAgg = 0.0 VALUE c OrAgg = false SET @a = 10 SET @b = 20.5 SET @c = true RETURN @a, @b, @c } ''' ```` 返回: ```` +----+------+------+ | @a | @b | @c | +----+------+------+ | 10 | 20.5 | true | +----+------+------+ ```` #### 为点绑定聚合值变量赋值 ```` ''' USE #movie_temporary_graph { NODE VALUE a ListAgg MATCH (v@Actor) WHERE v.id > 271940 PER NODE (v) { SET v.@a = LIST[v.id] LOG_INFO("ID_List: ", v.@a) } } ''' ```` 返回: ```` Log: 2025-08-06T07:02:23.215245 INFO - ID_List: [271947] 2025-08-06T07:02:23.215245 INFO - ID_List: [271944] 2025-08-06T07:02:23.215245 INFO - ID_List: [282659] 2025-08-06T07:02:23.215245 INFO - ID_List: [271943] 2025-08-06T07:02:23.215245 INFO - ID_List: [271946] 2025-08-06T07:02:23.215354 INFO - ID_List: [271945] 2025-08-06T07:02:23.215354 INFO - ID_List: [271942] 2025-08-06T07:02:23.215392 INFO - ID_List: [271941] ```` #### 为活动集变量赋值 ```` ''' USE #movie_temporary_graph { VALUE active_set ACTIVE_SET VALUE list_id ListAgg MATCH (a@Actor) WHERE a.id IN [31, 8252] PER NODE (a) { // 将匹配到的点的唯一标识符(UID)添加到列表中 SET @list_id += element_id(a) } // 将点的 UID 列表赋值给活动集变量 SET active_set = @list_id MATCH (a) WHERE a IN active_set PER NODE (a) { LOG_INFO("Actor Name: ", a.name) } } ''' ```` 返回: ```` Log: 2025-09-16T09:34:40.697808 INFO - Actor Name: Tom Hanks 2025-09-16T09:34:40.697808 INFO - Actor Name: William Holden ```` ### 聚合示例 #### 将值聚合到全局聚合值变量中 ```` ''' USE #movie_temporary_graph { VALUE global_avg AvgAgg SET @global_avg += 3 // Average: 3.0 (Total: 3, Count: 1) SET @global_avg += 7 // Average: 5.0 (Total: 10, Count: 2) SET @global_avg += 5 // Average: 5.0 (Total: 15, Count: 3) LOG_INFO("@global_avg: ",@global_avg) } ''' ```` 返回: ```` Log: 2025-09-16T09:36:54.696143 INFO - @global_avg: 5 ```` #### 将值聚合到点绑定聚合值变量中 ```` ''' USE #movie_temporary_graph { NODE VALUE node_avg AvgAgg MATCH (a@User WHERE a.id IN [1,3,4])-[w@Watch]->(b@Movie) PER PATH { // 累加用户对观看电影的评分并计算平均值 SET a.@node_avg += w.rate } PER NODE (a) { LOG_INFO("a.id: ",a.id, " a.@node_avg: ",a.@node_avg) } } ''' ```` 返回: ```` Log: 2025-09-16T09:37:42.145639 INFO - a.id: 3 a.@node_avg: 3.75 2025-09-16T09:37:42.145639 INFO - a.id: 1 a.@node_avg: 4.77778 2025-09-16T09:37:42.145639 INFO - a.id: 4 a.@node_avg: 2.66667 ```` ### 函数调用示例 #### 调用 clear() ```` ''' USE #movie_temporary_graph { VALUE global_set_1 SetAgg TABLE result_table { id, name } = (10, "new1"), (20, "new2") SET @global_set_1 += 3 // set: {3} SET @global_set_1 += 7 // set: {3, 7} SET @global_set_1 += 3 // set: {3, 7} (重复值不会被添加) SET @global_set_1 += 5 // set: {3, 7, 5} LOG_INFO("@global_set_1: ", @global_set_1) SET @global_set_1.clear() // set: {} LOG_INFO("@global_set_1: ", @global_set_1) SET result_table.clear() // 清空表 FOR rec IN result_table RETURN rec.id, rec.name } ''' ```` 返回: ```` +--------+----------+ | rec.id | rec.name | +--------+----------+ +--------+----------+ Log: 2026-01-16T06:53:14.956605 INFO - @global_set_1: [5,7,3] 2026-01-16T06:53:14.957146 INFO - @global_set_1: [] ````