查询不同的属性并返回完整节点

3
我有很多节点,在字段X中有一些相似的值,我想通过不同的X值进行选择,并获取所有流行的节点(按其他字段Y排序),以及它们的所有属性。 示例:

ID | X | Y | Name

1 | A | 100 | David

2 | A | 10 | Chris

3 | B | 5 | Brad

4 | B | 25 | Amber

应返回:

1 | A | 100 | David

4 | B | 25 | Amber

我设法通过不同的X列出了列表:
MATCH (u:NodeType)
RETURN DISTINCT u.X

我需要找到最受欢迎的节点(Y值最高)与我的不同节点(现在只有一个属性)进行连接,并返回整个节点(包括所有属性)。

1个回答

2
你正在寻找一个类似于“arg max”的查询。我最近使用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]
也许,如果您在单独的子句中执行最后一步(而不是在执行 collectWITH 子句中执行),则查询可能会更容易阅读:
MATCH (u:NodeType)
WITH u
ORDER BY u.Y DESC
WITH u.X AS X, collect(u) AS us
RETURN us[0] AS u

1
回答不错,但Cypher语法不太正确。例如,第一个查询应该像这样:MATCH (u:NodeType) WITH u ORDER BY u.Y DESC WITH u.X AS x, COLLECT(u)[0] AS u RETURN u; - cybersam
好的,谢谢!我对帖子进行了相当大的编辑,这个问题被忽略了。 - Gabor Szarnyas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接