全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

聚合操作

最近更新时间:2025-11-11 16:29:40

在 Cypher 中,聚合操作(Aggregation) 用于对多行数据进行分组计算,并返回汇总结果。常见聚合包括计数、求和、平均值、最小值与最大值等。

通常,聚合函数以 aggr(expr) 的形式使用,用于处理在输入记录中针对每个聚合键(aggregation key)找到的所有匹配行。聚合键之间的比较遵循 等价性(Equivalency) 规则(详见可比性与相等性章节)。

在常规聚合中(即 aggr(expr) 形式),聚合值列表是候选值列表,其中所有空值都被移除。


数据初始化

以下示例初始化一组节点与关系,用于演示 Cypher 聚合操作。

SELECT * FROM cypher('graph_name', $$
	CREATE (a:Person {name: 'A', age: 13}),
	(b:Person {name: 'B', age: 33, eyes: "blue"}),
	(c:Person {name: 'C', age: 44, eyes: "blue"}),
	(d1:Person {name: 'D', eyes: "brown"}),
	(d2:Person {name: 'D'}),
	(a)-[:KNOWS]->(b),
	(a)-[:KNOWS]->(c),
	(a)-[:KNOWS]->(d1),
	(b)-[:KNOWS]->(d2),
	(c)-[:KNOWS]->(d2)
$$) as (a agtype);

自动分组

Cypher 提供的聚合机制与 SQL 的 GROUP BY 类似,用于在查询中对匹配结果进行分组并计算聚合值。

聚合函数接受一组值并计算它们的聚合值。例如:

  • avg():计算多个数值的平均值

  • min() :返回一组值中的最小值(数值或字符串)

当我们说聚合函数“对一组值进行操作”时,指的是该函数将内部表达式(如 n.age)应用到同一聚合组中所有记录的结果集上。

聚合可以在所有匹配的子图上计算,或者可以通过引入分组键进一步划分。这些是非聚合表达式,用于对进入聚合函数的值进行分组。

例如,如下查询统计每个名称(name)对应的节点数量:

SELECT * FROM cypher('graph_name', $$
    MATCH (v:Person)
    RETURN v.name AS grouping_key, count(*) AS count
$$) AS (grouping_key agtype, count agtype);

查询结果:

count

key

A

1

B

1

C

1

D

2

4 row

在该示例中:

  • grouping_key 为分组键(非聚合表达式)

  • count(*) 为聚合函数

查询执行流程如下:

  1. 匹配所有带有 Person 标签的节点;

  2. name 对节点分组;

  3. 对每个分组计算 count(*)

  4. 输出每组对应的节点数量。

最终,所有匹配的子图将根据 grouping_key 被划分为独立分组桶(bucket),聚合函数将在每个分组内运行并生成聚合结果。


聚合函数排序

在 Cypher 中,若要对聚合结果进行排序,必须在 RETURN 子句中显式包含聚合表达式。这是因为只有返回结果中的聚合字段才能在 ORDER BY 中被引用。

SELECT *
FROM cypher('graph_name', $$
	MATCH (me:Person)-[]->(friend:Person)
	RETURN count(friend), me
	ORDER BY count(friend)
$$) as (friends agtype, me agtype);

去重聚合

在去重聚合中(即 aggr(DISTINCT expr) 形式),聚合值列表是候选值列表,其中所有空值都被移除。此外,在去重聚合中,所有等价候选值中只有一个包含在聚合值列表中,即等价下的重复项被移除。

DISTINCT 操作符与聚合一起工作。它用于在通过聚合函数运行之前使所有值唯一。

SELECT *
FROM cypher('graph_name', $$
	MATCH (v:Person)
	RETURN count(DISTINCT v.eyes), count(v.eyes)
$$) as (distinct_eyes agtype, eyes agtype);

distinct_eyes

eyes

2

3

1 row

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈