Neo4j 可以合并这两个查询
我有两个cypher问题,想知道是否有可能在一份声明中获得积分和猎头信息Neo4j 可以合并这两个查询,neo4j,cypher,Neo4j,Cypher,我有两个cypher问题,想知道是否有可能在一份声明中获得积分和猎头信息 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:ELIM
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
注意,对于pElim和pFinish的各种组合,您将有许多额外的输出行,但各自的值应该是正确的。原则上,我认为您的查询可以工作,但您可能在使用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
注意:对于pElim和pFinish的各种组合,您将有很多额外的输出行,但各自的值应该是正确的。这对您有用吗
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
这应该返回每个完成和/或被淘汰的球员的相关金额。这对你有用吗
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
这将返回每个已完成和/或已被淘汰的玩家的相关总和。此查询仅匹配具有已淘汰关系和已完成关系的事件。虽然比原来的查询好,但这可能仍然不合适。啊,那么OP也在寻找事件对象的独立性?原始问题中的实际模型需求有点模糊。如果我对我的用例和节点是如何“逻辑”连接的有点不清楚,那么@frobberoffits很抱歉。我对所有图形数据库的东西都相当陌生,可能必须弄清楚哪些信息与问我的问题相关,这是无误的。此查询只匹配具有消除关系和完成关系的事件。虽然比原来的查询好,但这可能仍然不合适。啊,那么OP也在寻找事件对象的独立性?原始问题中的实际模型需求有点模糊。如果我对我的用例和节点是如何“逻辑”连接的有点不清楚,那么@frobberoffits很抱歉。我对所有图形数据库的东西都是相当陌生的,可能必须弄清楚哪些信息与问我的问题相关,这是毫无疑问的。看起来很有希望。今天晚些时候我会尝试这个解决方案,如果它按预期工作,我会给你一个反馈。看起来很有希望。今天晚些时候我会尝试这个解决方案,如果它按预期工作,我会给你一个反馈。