在Neo4J中玩了一段时间后,我遇到了以下问题:
我有一个Neo4J数据库,其中只存储了一个节点类型和一个关系类型。节点和关系具有不同的属性,但它们与我的问题无关:
为了更好地理解,我对我的问题进行了一个小版本的建模:
注:虚线事务值不包括在相应的查询中,因为它们不是源自新节点。
是否有一种方法可以在一个查询中对不同跃点距离的所有关系值求和,并按属性对它们进行分组?
我知道如何通过3个不同的查询来实现这一点,每个查询对应一个距离,但我是否可以将这3个查询合并为1个高效查询?
MATCH (a:Node {is_capital_letter: 'True'})
<-[t1]-
(b:Node {is_new: 'True'})
RETURN a.capital_letter, sum(t1.value)
MATCH (a:Node {is_capital_letter: 'True'})
<-[t1]-()
<-[t2]-
(b:Node {is_new: 'True'})
RETURN a.capital_letter, sum(t2.value)
MATCH (a:Node{is_capital_letter: 'True'})
<-[t1]-()
<-[t2]-()
<-[t3]-
(b:Node {is_new: 'True'})
RETURN a.capital_letter, sum(t3.value)
是否可以在一个查询(按capital_letter
分组)中获得所有sum(t1.value)
、sum(t2.value)
和sum(t3.value)
?
编辑:CREATE
语句以重现上面的示例:
CREATE (a:Node {is_capital_letter: "True", capital_letter: "A"})
CREATE (b:Node {is_capital_letter: "True", capital_letter: "B"})
CREATE (n0:Node {is_new: "True"})
CREATE (n1:Node {is_new: "True"})
CREATE (n2:Node {is_new: "True"})
CREATE (n3:Node {is_new: "True"})
CREATE (n4:Node {is_new: "True"})
CREATE (n5:Node {is_new: "False"})
CREATE (n6:Node {is_new: "True"})
CREATE (n7:Node {is_new: "True"})
CREATE (n8:Node {is_new: "False"})
CREATE (n9:Node {is_new: "True"})
CREATE (n10:Node {is_new: "True"})
CREATE (n11:Node {is_new: "True"})
CREATE (n0)-[:TRANSACTIONS {value: 0}]->(a)
CREATE (n1)-[:TRANSACTIONS {value: 1}]->(a)
CREATE (n2)-[:TRANSACTIONS {value: 2}]->(a)
CREATE (n3)-[:TRANSACTIONS {value: 3}]->(a)
CREATE (n4)-[:TRANSACTIONS {value: 4}]->(a)
CREATE (n5)-[:TRANSACTIONS {value: 5}]->(a)
CREATE (n6)-[:TRANSACTIONS {value: 6}]->(n5)
CREATE (n7)-[:TRANSACTIONS {value: 7}]->(n4)
CREATE (n7)-[:TRANSACTIONS {value: 4}]->(n5)
CREATE (n8)-[:TRANSACTIONS {value: 8}]->(n3)
CREATE (n9)-[:TRANSACTIONS {value: 9}]->(n8)
CREATE (n10)-[:TRANSACTIONS {value: 1}]->(b)
CREATE (n11)-[:TRANSACTIONS {value: 2}]->(b)
2条答案
按热度按时间ryevplcw1#
应屈服:
ih99xse12#
如果您只需要一个查询(而不是提高性能),则可以使用WITH合并查询。
这将产生: