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