我需要在2个字段上返回查询结果。 这个查询运行良好,并做我需要的:
match(a:Assembly)
where a.SourceLocation = ""
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly)
return distinct a.Name,r.HintPath
现在我需要在结果中添加另一个字段。由于它是一个聚合,我只是返回最大条目
match(a:Assembly)
where a.SourceLocation = ""
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly)
return distinct (a.Name,r.HintPath),max(b.SourceLocation)
现在,上面的代码不起作用(语法错误)。 换句话说,我需要选择前两个字段组合的不同(或在sql中分组),以及第三个字段的最大条目。
Cypher的等效内容是什么?
答案 0 :(得分:2)
在Cypher中,您可以使用WITH -> ORDER BY -> COLLECT()[0]
获取列的最大值。您还可以使用{key1:value1, key2:value2}
地图语法将值收集到地图中。以下是使用上述语法的查询。
match(a:Assembly)
where a.SourceLocation = ""
match (a)<-[r:REFERENCES{Type: "DLL"}]-(b:Assembly)
with a, r, b
ORDER BY b.SourceLocation DESC
return distinct {Name: a.Name,Hint: r.HintPath} as source, COLLECT(b.SourceLocation)[0] as location