Neo4J - 如何通过WHERE子句和聚合来限制结果

时间:2016-01-29 11:54:23

标签: neo4j cypher graph-databases

我正在使用Neo4J并且已经查询了英格兰南部的大学,这是体育大学

但是我遇到了限制结果的问题。

我想要的是限制结果只显示具有最多 LIKES 的大学(在类型列中)。

例如,在下面的结果中,它应该只显示朴茨茅斯大学,而不是布莱顿大学

所以,我想要的只有三行显示了最大的喜欢的大学的WENT_TO,LIKES和DISLIKES。

The Query Ran

Results Returned from Query

1 个答案:

答案 0 :(得分:0)

我就是这样做的。我希望它有效,我还没有测试过。它应该只返回一行,因为我将所有计数放入一个地图中(可能你必须添加DISTINCT)。

MATCH (sportUni:Speciality {title: "Sporty University"})-[:SPECIALISES_IN]-(uni)-[:IS_LOCATED_IN_THE]-(locality:Region {title: "South England"}),
(uni)-[l:LIKES]-(),
(uni)-[d:DISLIKES]-(),
(uni)-[w:WENT_TO]-()
WITH DISTINCT sportUni, locality, uni, count(l) as likes, count(d) AS dislikes, count(w) AS wentto
ORDER BY likes DESC
RETURN head(collect(sportUni)) AS sportUni,
head(collect(locality)) AS locality,
head(collect(uni)) AS uni,
head(collect({LIKES: likes, DISLIKES: dislikes, WENT_TO: wentto})) AS count

编辑:语法修正

EDIT2:现在,通过一些研究我改编了this solution,并且它使用了一个小样本查询。虽然,它看起来不太优雅。