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

AvgAgg

AvgAgg 聚合值变量(AvgAgg<T>)用于对所有类型为T的输入进行平均值计算。

声明语法

avg_agg_declaration
NODE VALUE aggregator_value_variable AvgAgg < INT8 INT16 INT32 INT64 FLOAT DOUBLE >

avg_agg_declaration ::=
    'NODE'? 'VALUE' aggregator_value_variable 'AvgAgg' '<' ('INT8'|'INT16'|'INT32'|'INT64'|'FLOAT'|'DOUBLE') '>'

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

初始值

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

输入类型与支持的操作

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

支持赋值与聚合操作:

  • 赋值操作(=):该操作将重置聚合值变量的值。例如SET @avg_agg = 10将清除聚合值变量avg_agg中的值,并将其设置为 10。此时,它的总和为 10,数量为 1,平均值为 10。
  • 聚合操作(+=):该操作将值累加到聚合值变量中并根据累积值重新计算平均值。例如,如果avg_agg已有值,再执行SET @avg_agg += 10,它不会清除已有值,而是先将值10添加到avg_agg的累积和中并增加计数,然后根据所有累积的值自动更新其平均值。

返回类型

AvgAgg<T> -> DOUBLE

无论是哪种输入类型,返回类型始终为DOUBLE。

示例

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

全局 AvgAgg 聚合值变量

'''
USE #movie_temporary_graph {
  VALUE global_avg AvgAgg<INT>
  SET @global_avg += 3     // 平均值:3.0 (总和:3,数量:1)
  SET @global_avg += 7     // 平均值:5.0 (总和:10,数量:2)
  SET @global_avg += 5     // 平均值:5.0 (总和:15,数量:3)
  LOG_INFO("@global_avg: ",@global_avg)
  SET @global_avg = 0      // avg: 0 (重置值为 0)
  LOG_INFO("@global_avg: ",@global_avg)
}
'''

返回:

Log:
2025-08-21T08:04:55.522902 INFO  - @global_avg: 5
2025-08-21T08:04:55.524437 INFO  - @global_avg: 0

点绑定 AvgAgg 聚合值变量

'''
USE #movie_temporary_graph {
  NODE VALUE node_avg AvgAgg<DOUBLE>

  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:
2026-06-08T07:03:00.653691 INFO  - a.id: 4 a.@node_avg: 2.66667
2026-06-08T07:03:00.653691 INFO  - a.id: 1 a.@node_avg: 4.77778
2026-06-08T07:03:00.653691 INFO  - a.id: 3 a.@node_avg: 3.75