【问题标题】:In Neo4j how to group by one return key, instead of all non aggregate keys in return?在 Neo4j 中,如何按一个返回键分组,而不是所有非聚合键作为返回?
【发布时间】:2025-12-31 22:45:01
【问题描述】:

Neo4j documentation 提到:

4.3。聚合函数 为了计算聚合数据,Cypher 提供聚合,类似于 SQL 的 GROUP BY。

聚合函数采用一组值并计算聚合 价值超过他们。例子是 avg() 计算平均值 多个数值,或找到最小数值的 min() 或 一组值中的字符串值。当我们在下面说聚合 函数对一组值进行操作,我们的意思是这些是结果 将内部表达式(例如 n.age)应用于所有 同一聚合组内的记录。

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

假设我们有以下返回语句:

返回 n,计数(*)

我们有两个返回表达式:n 和 count()。第一个 n 不是聚合函数,因此它将是分组键。这 后者,count() 是一个聚合表达式。匹配的子图 将根据分组分为不同的桶 key. 然后聚合函数将在这些存储桶上运行, 计算每个桶的聚合值。

我不知道该怎么做:

RETURN n, m COLLECT(n);

例如,只使用n作为分组键,不能同时使用nm

【问题讨论】:

  • 您是想数点数还是想收集点什么?那到底是什么东西?

标签: group-by neo4j cypher


【解决方案1】:

这在 Cypher 中是不可能的,因为正如您从文档中了解到的那样,它会隐式分组。它与 SQL 非常相似,不同之处在于您必须显式添加 GROUP BY 子句。

你可以做的是使用subqueries,或者将查询分成两部分,首先聚合数据,然后在第二部分再次遍历每个节点。

【讨论】: