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

MaxAgg

MaxAgg 聚合值变量(MaxAgg<T>)用于保存所有类型为T的输入中的最大值。如需保存最小值,请参见 MinAgg。

声明语法

max_agg_declaration
NODE VALUE aggregator_value_variable MaxAgg < INT8 INT16 INT32 INT64 FLOAT DOUBLE STRING > = value_expression

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

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

初始值

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

输入类型与支持的操作

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

支持赋值与聚合操作。

返回类型

MaxAgg<T> -> T

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

示例

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

全局 MaxAgg 聚合值变量

'''
USE #movie_temporary_graph {
  VALUE global_max_int MaxAgg<INT> = 0
  VALUE global_max_double MaxAgg<DOUBLE> = 0.0
  VALUE global_max_string MaxAgg<STRING> = ""

  // INT 类型:取最大整数值
  SET @global_max_int += 3     // max: 3(0 < 3,保留 3)
  SET @global_max_int += 7     // max: 7(3 < 7,保留 7)
  SET @global_max_int += 5     // max: 7(5 < 7,保留 7)

  // DOUBLE 类型:取最大浮点数值
  SET @global_max_double += 3.14     // max: 3.14(0.0 < 3.14,保留 3.14)
  SET @global_max_double += 7.89     // max: 7.89(3.14 < 7.89,保留 7.89)
  SET @global_max_double += 5.5      // max: 7.89(5.5 < 7.89,保留 7.89)

  // STRING 类型:按字节的字典序取最大字符串
  SET @global_max_string += "apple"     // max: "apple"("" < "apple",保留 "apple")
  SET @global_max_string += "banana"    // max: "banana"("apple" < "banana",保留 "banana")
  SET @global_max_string += "cherry"    // max: "cherry"("banana" < "cherry",保留 "cherry")

  RETURN @global_max_int, @global_max_double, @global_max_string
}
'''

返回:

+-----------------+--------------------+--------------------+
| @global_max_int | @global_max_double | @global_max_string |
+-----------------+--------------------+--------------------+
| 7               | 7.89               | cherry             |
+-----------------+--------------------+--------------------+

点绑定 MaxAgg 聚合值变量

'''
USE #movie_temporary_graph {
  NODE VALUE node_max MaxAgg<DOUBLE> = 0
  MATCH (a@User WHERE a.id IN [1,3,4])-[w@Watch]->(b@Movie)
  PER PATH {
    // 追踪每个用户在 Watch 边上的最高评分
    SET a.@node_max += w.rate
  }
  PER NODE (a) {
    LOG_INFO("a.id: ", a.id, " a.@node_max: ", a.@node_max)
  }
}
'''

返回:

Log:
2025-08-12T09:02:57.493825 INFO  - a.id: 1 a.@node_max: 5
2025-08-12T09:02:57.493825 INFO  - a.id: 3 a.@node_max: 4.5
2025-08-12T09:02:57.493825 INFO  - a.id: 4 a.@node_max: 5