查询distinct属性并返回完整节点

时间:2017-12-09 18:19:11

标签: neo4j cypher

我收到了很多节点,其中一些节点在字段X中具有相似的值,我希望通过不同的X值进行选择,并使用所有热门节点(按其他字段排序{ {1}})及其所有属性

示例:

  

ID | X | Y |名称

     

1 | A | 100 |大卫

     

2 | A | 10 |克里斯

     

3 | B | 5 |布拉德

     

4 | B | 25 |琥珀

应该返回:

  

1 | A | 100 |大卫

     

4 | B | 25 |琥珀

我设法通过不同的Y获取列表:

X

我需要找到最常用的(MATCH (u:NodeType) RETURN DISTINCT u.X )最高值的节点来加入我的不同节点(现在只是一个属性)并返回整个节点(包含所有属性)。

1 个答案:

答案 0 :(得分:0)

您正在寻找arg max式的查询。我最近answered a similar problem使用collect

MATCH (u:NodeType)
WITH u
ORDER BY u.Y DESC
WITH u.X AS X, collect(u)[0] AS u
RETURN u

这个想法如下:

  1. Y(降序)的值排序。
  2. X的值隐式分组,对于聚合函数,使用collect将其他值收集到列表中。列表的元素是节点(仍然按照Y的降序存储。)
  3. 对于每个收集的列表,请选择包含[0]的第一个元素。
  4. 如果您在单独的子句中执行最后一步(而不是执行WITH的{​​{1}}子句),则查询可能更容易阅读:

    collect