Cypher 语言并没有原生的 GROUP BY
关键字,但聚合函数(例如 COUNT
)隐含地引入了分组。
https://neo4j.com/docs/cypher-manual/current/functions/aggregating/#grouping-key-examples
聚合函数采用一组值并计算它们的聚合值。可以对所有匹配路径进行聚合计算,也可以通过引入分组键来进一步划分。分组键是非聚合表达式,用于对进入聚合函数的值进行分组。
例如,假设以下查询包含两个返回表达式n
和count(*)
:
RETURN n, count(*)
第一个n
不是聚合函数,因此它将是分组键。后者count(*)
是一个聚合表达式。根据分组键,匹配的路径将被分为不同的桶。然后,聚合函数将在这些存储桶上运行,计算每个存储桶的聚合值。
用于count(*)
对关系类型进行分组和计数
该函数count(*)
可用于对匹配关系的类型进行分组并返回类型的数量。
MATCH (p:Person {name: 'Keanu Reeves'})-[r]->()
RETURN type(r), count(*)
对匹配的关系类型进行分组,并返回关系类型的组数:
类型(r) | 数数(*) |
---|---|
|
|
|
|
行数:2 |
有重复和无重复的计数
此示例尝试查找 的朋友的所有朋友Keanu Reeves
并对其进行计数。
count(DISTINCT friendOfFriend)
-
只会计算
friendOfFriend
一次,因为DISTINCT
会删除重复项。 count(friendOfFriend)
-
会
friendOfFriend
多次考虑同样的事情。
MATCH (p:Person)-->(friend:Person)-->(friendOfFriend:Person)
WHERE p.name = 'Keanu Reeves'
RETURN friendOfFriend.name, count(DISTINCT friendOfFriend), count(friendOfFriend)
节点Carrie Anne Moss
和Liam Neeson
都与 具有传出KNOWS
关系Guy Pearce
。Guy Pearce
因此,当不使用 时,该节点将被计数两次DISTINCT
。
朋友的朋友.name | 计数(不同的朋友的朋友) | 计数(朋友的朋友) |
---|---|---|
|
|
|
https://stackoverflow.com/questions/52722671/how-to-make-group-by-in-a-cypher-query
标签:count,功能,Cypher,group,name,计数,分组,friendOfFriend,聚合 From: https://www.cnblogs.com/bonelee/p/17616201.html