可以组合这两个查询

Possible to combine these two queries

我有两个密码查询,想知道是否有可能在一个语句中获取积分和猎头信息。

MATCH (s:SEASON)-[*]->(e:EVENT)<-[f:FINISHED]-(p:PLAYER)
    WHERE s.id = 8 AND e.id <= 1197
    RETURN p, sum(f.points) AS Points
    ORDER BY Points DESC

MATCH (s:SEASON)-[*]->(e:EVENT)<-[el:ELIMINATED]-(p:PLAYER)
    WHERE s.id = 8 AND e.id <= 1197
    RETURN p, sum(el.points) AS HeadHunter
    ORDER BY HeadHunter DESC

我试过不同的方法,但都没有奏效。我想做这样的事情:

MATCH (s:SEASON)-[*]->(e:EVENT)<-[el:ELIMINATED]-(p:PLAYER),(e)<-[f:FINISHED]-(p)
    WHERE s.id = 8 AND e.id <= 1197
    RETURN p, sum(el.points) AS HeadHunter, sum(f.points) AS Points

原则上我认为您的查询可以工作,但您的 p 变量可能有误。在此查询中:

MATCH (s:SEASON)-[*]->(e:EVENT)<-[el:ELIMINATED]-(p:PLAYER),(e)<-[f:FINISHED]-(p)
    WHERE s.id = 8 AND e.id <= 1197
    RETURN p, sum(el.points) AS HeadHunter, sum(f.points) AS Points

请注意,p 必须是同时具有 ELIMINATED 关系 FINISHED 关系的玩家。我猜测基于您域的语义,这没有意义;你总不能被淘汰出局了吧?

所以您可能想尝试一些变体:

MATCH (s:SEASON)-[*]->(e:EVENT)<-[el:ELIMINATED]-(pElim:PLAYER),(e)<-[f:FINISHED]-(pFinish)
    WHERE s.id = 8 AND e.id <= 1197
    RETURN pElim, sum(el.points) AS HeadHunter, pFinish, sum(f.points) AS Points

请注意,对于 pElimpFinish 的各种组合,您会有很多额外的输出行,但各自的值应该是正确的。

这对你有用吗?

MATCH (s:SEASON)-[*]->(e:EVENT)<-[rel:FINISHED|ELIMINATED]-(p:PLAYER)
WHERE s.id = 8 AND e.id <= 1197
WITH p, COLLECT(rel) AS rels
RETURN p,
  REDUCE(s = 0, x IN rels | CASE WHEN TYPE(x) = 'FINISHED' THEN s + x.points ELSE s END) AS Points,
  REDUCE(s = 0, x IN rels | CASE WHEN TYPE(x) = 'ELIMINATED' THEN s + x.points ELSE s END) AS HeadHunter

这应该 return 每个完成 and/or 被淘汰的玩家的相关总和。