neo4j cypher

时间:2016-03-25 19:34:39

标签: math neo4j cypher

Follwing是我在cypher中编写的一个工作查询,使用CASE表达式和sign数学函数来解决明显缺乏数学min方法的问题。

MATCH (a)-[ar:REL]->(b)<-[br:REL]-(c)
RETURN CASE sign(ar.integer-br.integer) WHEN 1 THEN sum(br.integer) ELSE sum(ar.integer) END AS integer
ORDER BY integer DESC

我需要比较两个数字并取最低的数字(同样可以做最高的数字),然后将所有最低结果相加。这是常见的math.min或math.max函数,而不是最小或最大统计聚合。

有更好的方法吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

此查询可能适合您。

MATCH (a)-[ar:REL]->(b)<-[br:REL]-(c)
WHERE ID(a) > ID(b)
RETURN b, SUM(
  CASE
    WHEN ar.integer > br.integer THEN br.integer
    ELSE ar.integer END) AS integer
ORDER BY integer DESC

WHERE子句用于防止重复匹配(否则您的总和将使其正确值加倍)。它还会为每个SUMaggregation&#34;分组键&#34;)计算b,然后按降序对结果进行排序。 (如果你没有用分组键聚合,那么只有一个总和,所以排序没有任何意义。)