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

MinAgg

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

声明语法

min_agg_declaration
NODE VALUE aggregator_value_variable MinAgg < INT8 INT16 INT32 INT64 FLOAT DOUBLE STRING > = value_expression

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

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

初始值

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

输入类型与支持的操作

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

支持赋值与聚合操作。

返回类型

MinAgg<T> -> T

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

示例

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

全局 MinAgg 聚合值变量

'''
USE #movie_temporary_graph {
  VALUE global_min_int MinAgg<INT> = 100
  VALUE global_min_double MinAgg<DOUBLE> = 100.0
  VALUE global_min_string MinAgg<STRING> = "zzz"

  // INT 类型:取最小整数值
  SET @global_min_int += 30     // min: 30(30 < 100,更新为 30)
  SET @global_min_int += 10     // min: 10(10 < 30,更新为 10)
  SET @global_min_int += 50     // min: 10(50 > 10,保留 10)

  // DOUBLE 类型:取最小浮点数值
  SET @global_min_double += 35.5     // min: 35.5(35.5 < 100.0,更新为 35.5)
  SET @global_min_double += 12.8     // min: 12.8(12.8 < 35.5,更新为 12.8)
  SET @global_min_double += 58.3     // min: 12.8(58.3 > 12.8,保留 12.8)

  // STRING 类型:按字节的字典序取最小字符串
  SET @global_min_string += "cherry"     // min: "cherry"("cherry" < "zzz",更新为 "cherry")
  SET @global_min_string += "apple"      // min: "apple"("apple" < "cherry",更新为 "apple")
  SET @global_min_string += "banana"     // min: "apple"("banana" > "apple",保留 "apple")

  RETURN @global_min_int, @global_min_double, @global_min_string
}
'''

返回:

+-----------------+--------------------+--------------------+
| @global_min_int | @global_min_double | @global_min_string |
+-----------------+--------------------+--------------------+
| 10              | 12.8               | apple              |
+-----------------+--------------------+--------------------+

点绑定 MinAgg 聚合值变量

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

返回:

Log:
2025-08-22T03:57:02.248668 INFO  - a.id: 4 a.@node_min: 1
2025-08-22T03:57:02.248668 INFO  - a.id: 1 a.@node_min: 4
2025-08-22T03:57:02.248668 INFO  - a.id: 3 a.@node_min: 3