在Neo4j中按类型计算关系数量

5

我的数据库中有很多种关系类型。如何在不使用apoc的情况下按每种类型计算关系数量?

2个回答

12

解决方案

MATCH ()-[relationship]->() 
RETURN TYPE(relationship) AS type, COUNT(relationship) AS amount
ORDER BY amount DESC;

第一行指定了用于定义关系变量的模式,该模式用于在第二行中确定类型和数量。

示例结果

╒══════════════╤════════╕
│"type""amount"│
╞══════════════╪════════╡
│"BELONGS_TO"1234567 │
├──────────────┼────────┤
│"CONTAINS"432552  │
├──────────────┼────────┤
│"IS_PART_OF"947227  │
├──────────────┼────────┤
│"HOLDS"4       │
└──────────────┴────────┘

你应该添加 ORDER BY xyz DESC - Guy Coder
谢谢您的回答!除非您在不同节点之间有重复的关系名称并且希望捕获它,否则这很好。在这种情况下,以下表达式可能会有所帮助: match (a)-[r]-(b) return distinct labels(a), labels(b), type(r) as type, count(r) as amount - Anna Yashina
你还应该指定方向,否则有向边会被计算两次:MATCH ()-[relationship]->() - roschach
GuyCoder,@FrancescoBoi 感谢您的建议。解决方案已更新。 - ThirstForKnowledge

2

在3.5.x中还有一个内置的过程可用于检索计数,但需要进行一些筛选才能得到您感兴趣的内容:

"最初的回答"

CALL db.stats.retrieve('GRAPH COUNTS') YIELD data
UNWIND [data IN data.relationships WHERE NOT exists(data.startLabel) AND NOT exists(data.endLabel)] as relCount
RETURN coalesce(relCount.relationshipType, 'all') as relationshipType, relCount.count as count

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接