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

SumAgg

SumAgg聚合器值变量(SumAgg<T>)用于维护所有输入值的聚合结果,其中T表示输入值的数据类型。其聚合行为取决于所指定的数据类型:

  • 数值类型(INT、DOUBLE):计算输入值的数学总和。
  • 字符串类型(STRING):按处理顺序对输入字符串进行拼接。请注意,拼接时没有隐式的分隔符(例如空格),如果您需要分隔符,必须显式添加。

声明语法

sum_agg_declaration
NODE VALUE aggregator_value_variable SumAgg < INT8 INT16 INT32 INT64 FLOAT DOUBLE STRING > = value_expression

sum_agg_declaration ::=
    'NODE'? 'VALUE' aggregator_value_variable 'SumAgg' '<' ('INT8'|'INT16'|'INT32'|'INT64'|'FLOAT'|'DOUBLE'|'STRING') '>' '=' value_expression

关于声明语法中参数的详细信息,请参见参数。

初始值

从声明语法中可见,声明时必须指定初始值。

输入类型与支持的操作

输入类型必须为声明时指定的类型T。

支持赋值与聚合操作。

返回类型

SumAgg<T> -> T

返回类型与声明时指定的类型T相同。

示例

以下示例基于 CREATE TEMPORARY GRAPH 中创建的临时图#movie_temporary_graph。

全局 SumAgg 聚合值变量

'''
USE #movie_temporary_graph {
  VALUE global_sum_int SumAgg<INT> = 0
  VALUE global_sum_double SumAgg<DOUBLE> = 0.0
  VALUE global_sum_string SumAgg<STRING> = ""

  -- INT 类型:累加整数值
  SET @global_sum_int += 3     // sum: 3(0 + 3)
  SET @global_sum_int += 4     // sum: 7(3 + 4)
  SET @global_sum_int += 5     // sum: 12(7 + 5)

  -- DOUBLE 类型:累加浮点数值
  SET @global_sum_double += 3.14     // sum: 3.14(0.0 + 3.14)
  SET @global_sum_double += 4.56     // sum: 7.7(3.14 + 4.56)
  SET @global_sum_double += 5.3      // sum: 13.0(7.7 + 5.3)

  -- STRING 类型:拼接字符串
  SET @global_sum_string += "Hello"     // sum: "Hello"("" + "Hello")
  SET @global_sum_string += " "         // sum: "Hello "("Hello" + " ")
  SET @global_sum_string += "World"     // sum: "Hello World"("Hello " + "World")

  RETURN @global_sum_int, @global_sum_double, @global_sum_string
}
'''

返回:

+-----------------+--------------------+--------------------+
| @global_sum_int | @global_sum_double | @global_sum_string |
+-----------------+--------------------+--------------------+
| 12              | 13.0               | Hello World        |
+-----------------+--------------------+--------------------+

点绑定 SumAgg 聚合值变量

'''
USE #movie_temporary_graph {
  NODE VALUE node_sum SumAgg<INT> = 0
  MATCH (a@Actor WHERE a.id IN [3,4])
  PER NODE (a) {
    SET a.@node_sum += 1     // 将每个演员的求和值加 1
  }
  PER NODE (a) {
    LOG_INFO("a.name: ",a.name, " a.id: ",a.id, " a.@node_sum: ",a.@node_sum)
  }
}
'''

返回:

Log:
2025-08-08T08:29:51.496032 INFO  - a.name: Carrie Fisher a.id: 4 a.@node_sum: 1
2025-08-08T08:29:51.496032 INFO  - a.name: Harrison Ford a.id: 3 a.@node_sum: 1