Source: https://dev-docs.nebula-graph.io/v5.3.2/database-gql-reference/variable-definition/agg/max_agg/ Documentation version: v5.3.2 # MaxAgg A MaxAgg aggregator value variable (`MaxAgg`) maintains the maximum value among all inputs, where `T` represents the data type of the input values. To maintain the minimum value, see [MinAgg](https://dev-docs.nebula-graph.io/v5.3.2/database-gql-reference/variable-definition/agg/min_agg/). ## Declaration syntax diagramsource max_agg_declaration ```` max_agg_declaration ::= 'NODE'? 'VALUE' aggregator_value_variable 'MaxAgg' '<' ('INT8'|'INT16'|'INT32'|'INT64'|'FLOAT'|'DOUBLE'|'STRING') '>' '=' value_expression ```` For information about the parameters in the declaration syntax, see [Parameters](https://dev-docs.nebula-graph.io/v5.3.2/database-gql-reference/variable-definition/agg/#parameters). ## Initial value As indicated in the declaration syntax, an initial value is required during declaration. ## Input type and supported operations The input type must be `T`, which is specified during declaration. Both [assignment and aggregation](https://dev-docs.nebula-graph.io/v5.3.2/database-gql-reference/set/) operations are supported. ## Return type ```` MaxAgg -> T ```` The return type is the same as the type `T` specified during declaration. ## Examples The following examples are based on the temporary graph `#movie_temporary_graph` created in [CREATE TEMPORARY GRAPH](https://dev-docs.nebula-graph.io/v5.3.2/database-gql-reference/ddl/graph-projection/create/). ### Global MaxAgg aggregator value variables ```` ''' USE #movie_temporary_graph { VALUE global_max_int MaxAgg = 0 VALUE global_max_double MaxAgg = 0.0 VALUE global_max_string MaxAgg = "" // INT type: Get the maximum integer value SET @global_max_int += 3 // max: 3 (0 < 3, keeps 3) SET @global_max_int += 7 // max: 7 (3 < 7, keeps 7) SET @global_max_int += 5 // max: 7 (5 < 7, keeps 7) // DOUBLE type: Get the maximum floating-point value SET @global_max_double += 3.14 // max: 3.14 (0.0 < 3.14, keeps 3.14) SET @global_max_double += 7.89 // max: 7.89 (3.14 < 7.89, keeps 7.89) SET @global_max_double += 5.5 // max: 7.89 (5.5 < 7.89, keeps 7.89) // STRING type: Get the lexicographically largest string by byte comparison SET @global_max_string += "apple" // max: "apple" ("" < "apple", keeps "apple") SET @global_max_string += "banana" // max: "banana" ("apple" < "banana", keeps "banana") SET @global_max_string += "cherry" // max: "cherry" ("banana" < "cherry", keeps "cherry") RETURN @global_max_int, @global_max_double, @global_max_string } ''' ```` Return: ```` +-----------------+--------------------+--------------------+ | @global_max_int | @global_max_double | @global_max_string | +-----------------+--------------------+--------------------+ | 7 | 7.89 | cherry | +-----------------+--------------------+--------------------+ ```` ### Node-attached MaxAgg aggregator value variables ```` ''' USE #movie_temporary_graph { NODE VALUE node_max MaxAgg = 0 MATCH (a@User WHERE a.id IN [1,3,4])-[w@Watch]->(b@Movie) PER PATH { // For each user, track the highest rating on Watch edges SET a.@node_max += w.rate } PER NODE (a) { LOG_INFO("a.id: ", a.id, " a.@node_max: ", a.@node_max) } } ''' ```` Return: ```` 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 ````