Apache AGE中count聚合函数工作机制及示例分组疑问
Apache AGE聚合函数疑问解答
数据初始化语句
SELECT * FROM cypher('graph_name', $$ CREATE (:L {a: 1, b: 2, c: 3}), (:L {a: 2, b: 3, c: 1}), (:L {a: 3, b: 1, c: 2}) $$) as (a agtype);
查询语句
SELECT * FROM cypher('graph_name', $$ MATCH (x:L) RETURN (x.a + x.b + x.c) + count(*) + count(*), x.a + x.b + x.c $$) as (count agtype, key agtype);
查询输出
count | key -------+----- 12 | 6 (1 row)
问题解答
分组键的确定
分组键是返回列表中的x.a + x.b + x.c部分。在Cypher的聚合规则中:当RETURN子句同时包含聚合函数(如count(*))和非聚合表达式时,所有非聚合表达式会自动作为分组依据,将结果按这些表达式的取值分组。
count的计算逻辑
- 先计算每个节点的
x.a + x.b + x.c:- 三个节点的计算结果均为6(1+2+3=6、2+3+1=6、3+1+2=6),因此所有节点会被归为同一个分组。
count(*)的作用是统计当前分组内的节点数量,这里分组包含3个节点,所以count(*)的取值为3。- 计算返回的第一个表达式:
(x.a + x.b + x.c) + count(*) + count(*),代入数值后为6 + 3 + 3 = 12,这就是输出中count列的结果。 key列直接取分组键的统一值6,因此最终输出仅1行数据。
内容的提问来源于stack exchange,提问作者ahmed_131313
相关产品推荐
相关产品推荐

