Cypher - 排序和明显的冲突

时间:2017-04-24 09:35:56

标签: neo4j cypher

我必须从结果中返回三个属性。但结果应该是有序的。因此,为了对结果进行排序,请将该属性添加到return语句中 查询:

RETURN n.prop1,n.prop2,n.prop3

前:

prop1   prop2   prop3   
a        3       2   
b        4       3   
b        4       3

此结果未订购,因此我订购了另一个属性 查询:

RETURN n.prop1,n.prop2,n.prop3 ORDER BY n.prop4

前:

prop1   prop2   prop3  prop4  
b        4       3      0.8
b        4       3      0.6
a        3       2      0.4

现在,无论prop4值如何。我必须返回明确的价值 例如:

prop1   prop2   prop3  prop4  
b        4       3      0.8
a        3       2      0.4

但是因为prop4对于两行是不同的,所以我无法在return语句中创建不同的prop1值。因此,ORDER BY和DISTINCT发生了冲突。

2 个答案:

答案 0 :(得分:0)

b有两行,其中包含dist4 prop4值,那么您想如何订购呢?您需要确定要用于订购的prop4

例如,您可以使用聚合并获取最大值(这似乎是您在上一步中所做的):

UNWIND [{prop1:'a',prop2:3,prop3:2,prop4:0.4}, {prop1:'b',prop2:4,prop3:3,prop4:0.8},{prop1:'b',prop2:4,prop3:3,prop4:0.6}] as n
RETURN DISTINCT n.prop1,n.prop2,n.prop3,max(n.prop4) as maxProp4 
ORDER BY maxProp4 DESC

答案 1 :(得分:0)

这可能是您想要的(假设您的节点具有Foo标签):

MATCH (n:Foo)
WITH n ORDER BY n.prop4
RETURN n.prop1, n.prop2, n.prop3, COLLECT(n.prop4) AS p4;

首先按Foo对所有prop4个节点进行排序,然后为prop4prop1的每个不同组合返回prop2值的有序集合和prop3值。

以下是一个示例结果:

+-----------------------------------------+
| n.prop1 | n.prop2 | n.prop3 | p4        |
+-----------------------------------------+
| "b"     | 4       | 3       | [0.6,0.8] |
| "a"     | 3       | 2       | [0.4]     |
+-----------------------------------------+