首页 > 解决方案 > 我无法在 Neo4j 中将以下代码更改为 if-else 条件

问题描述

我是 Neo4j 的新手,并试图将 ScoreFT[0] 与 ScoreFT[1] 进行比较,并得到 Neo4j 中更大的值。我尝试过一次,但没有奏效。我不知道使用 order by和最后一个代码中的限制(返回案例)。请帮助我。

Round,Date,Team1,FT,HT,Team2
1,(Fri) 11 Aug 2017 (32),Arsenal FC,4-3,2-2,Leicester City FC
1,(Sat) 12 Aug 2017 (32),Brighton & Hove Albion FC,0-2,0-0,Manchester City FC
1,(Sat) 12 Aug 2017 (32),Chelsea FC,2-3,0-3,Burnley FC
1,(Sat) 12 Aug 2017 (32),Crystal Palace FC,0-3,0-2,Huddersfield Town AFC
1,(Sat) 12 Aug 2017 (32),Everton FC,1-0,1-0,Stoke City FC
1,(Sat) 12 Aug 2017 (32),Southampton FC,0-0,0-0,Swansea City AFC
1,(Sat) 12 Aug 2017 (32),Watford FC,3-3,2-1,Liverpool FC
1,(Sat) 12 Aug 2017 (32),West Bromwich Albion FC,1-0,1-0,AFC Bournemouth
1,(Sun) 13 Aug 2017 (32),Manchester United FC,4-0,1-0,West Ham United FC
1,(Sun) 13 Aug 2017 (32),Newcastle United FC,0-2,0-0,Tottenham Hotspur FC

进口查询

尝试使用 if/else

标签: databaseneo4jcyphergraph-databases

解决方案


CASE 仅适用于单个值,但您试图根据比较在此处使用多个值,更糟糕的是,您试图让单个 CASE 输出多个变量,这是行不通的。

最好先在复合结构中获取所需的值(在 2 元素列表或映射中),然后使用两个 CASE 为每个变量获取正确的值。像这样,替换你的返回:

...
WITH [t1.key, ScoreFT[0]] as t1Score, [t2.key, ScoreFT[1]] as t2Score, ScoreFT[0] > ScoreFT[1] as t1Won
RETURN CASE WHEN t1Won THEN t1Score ELSE t2Score END as s, 
       CASE WHEN t1Won THEN t2Score ELSE t1Score END as p

如果您想要一个地图,您可以显式创建它而不是使用列表:

WITH t1 {.key, score:ScoreFT[0]} as t1Score, t2 {.key, score:ScoreFT[1]} as t2Score, ...

推荐阅读