在同一查询中返回distinct + max

时间:2017-09-25 16:45:17

标签: neo4j cypher

我需要在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的等效内容是什么?

1 个答案:

答案 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