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函数,而不是最小或最大统计聚合。
有更好的方法吗?我错过了什么吗?
答案 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
子句用于防止重复匹配(否则您的总和将使其正确值加倍)。它还会为每个SUM
(aggregation&#34;分组键&#34;)计算b
,然后按降序对结果进行排序。 (如果你没有用分组键聚合,那么只有一个总和,所以排序没有任何意义。)