Neo4j 比较来自不同查询的总和并显示结果
Neo4j compare sums from different queries and display result
有什么方法可以比较不同查询的结果吗?能否将以下查询与 return 一起写入单个查询中以获得 想要的结果?
查询 1:Returns 个国家和不属于其区域的国家给出的所有点的 SUM。
MATCH (c:Country)
with c
MATCH (c)-[vFrom:vote_from]->(vP:vote_points)-[vFor:vote_for]->(c2:Country)
with c,c2,vP
where not c.region=c2.region
return c2.name,sum(toInteger(vP.points))
来自查询 1 的示例 return:
"Monaco" 11
"Montenegro" 34
"France" 359
"Cyprus" 600
"Romania" 837
Query2:Returns 个国家和属于其区域的国家给出的所有点的 SUM。
MATCH (c:Country)
with c
MATCH (c)-[vFrom:vote_from]->(vP:vote_points)-[vFor:vote_for]->(c2:Country)
with c,c2,vP
where c.region=c2.region
return c2.name,c.name,sum(toInteger(vP.points))
来自查询 2 的示例 return:
"Monaco" 35
"Montenegro" 66
"France" 157
"Cyprus" 102
"Romania" 255
想要的结果:
"Monaco" 35
"Montenegro" 66
假设您要查找区域内总点数超过区域外总点数的情况,此查询可能适合您:
MATCH (c:Country)-[:vote_from]->(vP:vote_points)-[:vote_for]->(c2:Country)
WITH c2,
REDUCE(s={in: 0, out: 0}, x IN COLLECT({reg: c.region, pts: toInteger(vP.points)}) |
CASE WHEN x.reg=c2.region
THEN {in: s.in + x.pts, out: s.out}
ELSE {in: s.in, out: s.out + x.pts}
END) AS res
WHERE res.in > res.out
RETURN c2.name AS name, res.in AS points
有什么方法可以比较不同查询的结果吗?能否将以下查询与 return 一起写入单个查询中以获得 想要的结果?
查询 1:Returns 个国家和不属于其区域的国家给出的所有点的 SUM。
MATCH (c:Country)
with c
MATCH (c)-[vFrom:vote_from]->(vP:vote_points)-[vFor:vote_for]->(c2:Country)
with c,c2,vP
where not c.region=c2.region
return c2.name,sum(toInteger(vP.points))
来自查询 1 的示例 return:
"Monaco" 11
"Montenegro" 34
"France" 359
"Cyprus" 600
"Romania" 837
Query2:Returns 个国家和属于其区域的国家给出的所有点的 SUM。
MATCH (c:Country)
with c
MATCH (c)-[vFrom:vote_from]->(vP:vote_points)-[vFor:vote_for]->(c2:Country)
with c,c2,vP
where c.region=c2.region
return c2.name,c.name,sum(toInteger(vP.points))
来自查询 2 的示例 return:
"Monaco" 35
"Montenegro" 66
"France" 157
"Cyprus" 102
"Romania" 255
想要的结果:
"Monaco" 35
"Montenegro" 66
假设您要查找区域内总点数超过区域外总点数的情况,此查询可能适合您:
MATCH (c:Country)-[:vote_from]->(vP:vote_points)-[:vote_for]->(c2:Country)
WITH c2,
REDUCE(s={in: 0, out: 0}, x IN COLLECT({reg: c.region, pts: toInteger(vP.points)}) |
CASE WHEN x.reg=c2.region
THEN {in: s.in + x.pts, out: s.out}
ELSE {in: s.in, out: s.out + x.pts}
END) AS res
WHERE res.in > res.out
RETURN c2.name AS name, res.in AS points