Graph 在Neo4j中使用带有计算值的集合创建';未定义';错误

Graph 在Neo4j中使用带有计算值的集合创建';未定义';错误,graph,neo4j,cypher,Graph,Neo4j,Cypher,我有一个基于国际象棋比赛的查询。它运行正常,并返回一个值。我道歉,如果它是丑陋的,我知道我可以清理它。但目前它工作正常,返回值为0.5 为了快速提供一些上下文,查询查看某人对手的对手,并聚合二级玩家的记录’,然后创建排名 MATCH (n)-[:HAS_RECORD]-(m)-[:PLAYED]-(a)-[:PLAYED]-(b)-[:HAS_RECORD]-(c)-[:HAS_RECORD]-(d)-[:PLAYED]-(e)-[:PLAYED]-(f)-[:HAS_RECORD]-(g) W

我有一个基于国际象棋比赛的查询。它运行正常,并返回一个值。我道歉,如果它是丑陋的,我知道我可以清理它。但目前它工作正常,返回值为0.5

为了快速提供一些上下文,查询查看某人对手的对手,并聚合二级玩家的记录’,然后创建排名

MATCH (n)-[:HAS_RECORD]-(m)-[:PLAYED]-(a)-[:PLAYED]-(b)-[:HAS_RECORD]-(c)-[:HAS_RECORD]-(d)-[:PLAYED]-(e)-[:PLAYED]-(f)-[:HAS_RECORD]-(g)
WHERE n.player_id = '1'
WITH e, f,
CASE WHEN e.player_wins='1'  THEN 1 ELSE 0 END AS wins_count
RETURN (toFloat(sum(win_count)) / toFloat(count(e))) * (sum(toInt(f.wins) ) /  (sum(toInt(f.wins)) + sum(toInt(f.losses)) +sum(toInt(f.draws)))) AS rank
我想
计算出的排名设置回节点
e
中代表的玩家。但我做不到

我尝试了这个,但没有成功…我得到了一个错误,
wins\u count未定义

MATCH (n)-[:HAS_RECORD]-(m)-[:PLAYED]-(a)-[:PLAYED]-(b)-[:HAS_RECORD]-(c)-[:HAS_RECORD]-(d)-[:PLAYED]-(e)-[:PLAYED]-(f)-[:HAS_RECORD]-(g)
WHERE n.player_id = '0'
WITH e, f,
CASE WHEN e.player_wins='1'  THEN 1 ELSE 0 END AS wins_count,
(toFloat(sum(wins_count)) / toFloat(count(e))) * (sum(toInt(f.wins) ) /  (sum(toInt(f.wins)) + sum(toInt(f.losses)) +sum(toInt(f.draws)))) AS rank
SET e.rank = rank
RETURN e  
我不知道如何计算
排名
,而不将其放在
案例
之后

我想既然没有定义
wins\u count
有问题,也许我需要把事情进行到底,所以我尝试在
案例
之后放置另一个
,但失败了…我不知怎的生成了一个排名表

然后,我尝试将计算排名的部分直接移动到
SET
语句中,但显然不能在
SET
语句中进行聚合


我再次为难看的代码道歉,并意识到我没有提供一个最小的示例。但我希望,既然这个问题本质上是句法问题,那么,对于知道是什么错的人来说,这一点会很清楚。谢谢。

当我们用
语句在
中声明变量时,我们不能在同一
语句中使用它。例如,如果我们尝试运行以下查询:

WITH 2 as K1, K1*3 as K2
RETURN K1, K2
我们得到一个错误:
变量“K1”未定义

因此,我们可以使用下一个查询:

WITH 2 as K1
RETURN K1,  K1*3 as K2
或:

结果将是:

╒═══╤═══╕
│K1 │K2 │
╞═══╪═══╡
│2  │6  │
└───┴───┘
╒═══╤═══╕
│K1 │K2 │
╞═══╪═══╡
│2  │6  │
└───┴───┘