Neo4j 将两个密码查询合并为单个查询和单个结果

Neo4j 将两个密码查询合并为单个查询和单个结果,neo4j,cypher,Neo4j,Cypher,我创建此查询是为了获取国家/地区的人员列表和一些平均值计算: Match (people:People)-[:LOCATED_IN]->(address:Address), (people)-[:SOME]->(calc) RETURN address.country as name, count(*) as count, avg(calc.value) as value 它返回corect值,例如: name, count, value PL , 5 , 10 UK ,

我创建此查询是为了获取国家/地区的人员列表和一些平均值计算:

Match (people:People)-[:LOCATED_IN]->(address:Address), (people)-[:SOME]->(calc)
RETURN address.country as name, count(*) as count, avg(calc.value) as value
它返回corect值,例如:

name, count, value
PL  , 5    , 10
UK  , 3    , 20
US  , 6    , 30
DE  , 3    , 40
我试图达到的目的是获得他们所认识的人的国家,因此预期结果应如下所示:

name, count, value, knowsAlso
PL  , 5    , 10   , UK,US
UK  , 3    , 20   , DE
US  , 6    , 30   , 
DE  , 3    , 40   , 
我创建了一个单独的查询,通过传递$country来获取该信息:

Match (firstPerson:Person)-[:LOCATED_IN]->(firstAddress:Address),
      (firstPerson:Person)-[:FRIEND_WITH]->(secondPerson:Person),
      (secondPerson:Person)-[:LOCATED_IN]->(secondAddress:Address)
WHERE firstAddress.country = $country
AND firstAddress.country <> secondAddress.country
RETURN DISTINCT secondAddress.country
匹配(第一人称:Person)-[:位于]->(第一地址:Address),
(第一人称:Person)-[:FRIEND_WITH]->(第二人称:Person),
(第二人:人)-[:位于]->(第二地址:地址)
其中firstAddress.country=$country
和firstAddress.country第二个address.country
返回第二个地址。国家/地区

但是在这个场景中,我需要为第一个查询的结果集中的每个记录调用它,这似乎是无效的。有没有办法直接在前一个查询的结果集上调用我的第二个查询?或者理想情况下,将这两个查询作为一个查询?

类似的内容可能适合您:

MATCH (calc)<-[:SOME]-(p:People)-[:LOCATED_IN]->(a1:Address)
WITH a1.country AS name,
     COUNT(*) AS count,
     AVG(calc.value) AS value,
     COLLECT(DISTINCT p) AS pList
UNWIND pList AS p1
OPTIONAL MATCH (p1)-[:FRIEND_WITH]->(:Person)-[:LOCATED_IN]->(a2:Address)
WHERE name <> a2.country
RETURN name, count, value, COLLECT(DISTINCT a2.country) AS knowsAlso
匹配(计算)(a1:地址)
以a1.国家为名称,
计数(*)作为计数,
平均值(计算值)作为值,
收集(不同的p)作为pList
如图1所示,展开pList
可选匹配(p1)-[:FRIEND_WITH]->(:Person)-[:LOCATED_IN]->(a2:Address)
你的国家在哪里
返回名称、计数、值、收集(不同的a2.国家/地区)作为已知值

Hey@cybersam。我想返回地址中有一些计算结果的人(这是主要优先级),另外还返回一个新列,如果有朋友的话,该列就是他的位置。当我测试您的解决方案时,它似乎只返回满足所有条件的人(有计算、位于和有朋友位于),忽略没有朋友的人。缺少的是第二次匹配之前的可选词,请在第二次匹配之前通过传递可选来编辑您的答案:)无论如何接受,谢谢