假设我在neo4j中有这个图:
CREATE (a:Person {name: "Person A"})
CREATE (b:Person {name: "Person B"})
CREATE (r1:TestA {result: 1})
CREATE (r2:TestA {result: 2})
CREATE (r3:TestA {result: 3})
CREATE (r4:TestA {result: 3})
CREATE (a)-[:RESULT]->(r1)
CREATE (a)-[:RESULT]->(r2)
CREATE (b)-[:RESULT]->(r3)
CREATE (b)-[:RESULT]->(r4);`
我如何仅为每个人返回最佳(具有最低result
属性的结果)结果?
如果我这样做
`MATCH (p:Person)-->(t:TestA) RETURN p, t ORDER BY t.result LIMIT 1;`
我只按预期获得(a)-->(r1)
,但我希望获得(a)-->(r1)
和(b)-->(r3 or r4)
。
有关如何实现这一目标的任何提示?提前谢谢。
答案 0 :(得分:4)
您可以在cypher中使用聚合函数:
MATCH (p:Person)-[:RESULT]->(t) RETURN p, min(t.result)
但是,对于没有RESULT关系的人,这不会返回一行。使用OPTIONAL MATCH
可以提供帮助。