neo4j 密码查询:误用with子句

cotxawn7  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(99)

我现在开始接近Cypher,我可能有一个微不足道的问题;所以我提供了一个示例查询,让你理解我的意思:

match (p1:Person)-[:works_on]->(project1:Project), (p2:Person)-[:works_on]->(project2:Project), (p1)-[:interested_in]->(interest:Skill)<-[:interested_in]-(p2)
where id(p1)>id(p2) 
with p1,p2, interest, count(interest) as conto
return p1.name, p2.name, count(interest) ,conto,  collect(interest.name) as interessi

字符串
结果:

╒════════╤═════════╤═══════════════╤═════╤══════════════════════════╕
│p1.name │p2.name  │count(interest)│conto│interessi                 │
╞════════╪═════════╪═══════════════╪═════╪══════════════════════════╡
│"Sarah" │"Charlie"│1              │2    │["DBMS"]                │
├────────┼─────────┼───────────────┼─────┼──────────────────────────┤
│"Sarah" │"Ben"    │2              │2    │["DBMS", "TRAVEL"]        │
├────────┼─────────┼───────────────┼─────┼──────────────────────────┤
│"Ben"   │"Charlie"│1              │1    │["DBMS"]                │
├────────┼─────────┼───────────────┼─────┼──────────────────────────┤
│"Arnold"│"Sarah"  │3              │2    │["TRAVEL", "JAVA", "DBMS"]│
├────────┼─────────┼───────────────┼─────┼──────────────────────────┤
│"Arnold"│"Ben"    │2              │1    │["TRAVEL", "DBMS"]        │
├────────┼─────────┼───────────────┼─────┼──────────────────────────┤
│"Arnold"│"Charlie"│1              │1    │["DBMSs"]                │


我想知道的是为什么两列count(interest)conto不同。为什么?后者实际上是什么?

pbpqsu0x

pbpqsu0x1#

WITHRETURN子句中,aggregating function(类似于COLLECT)聚合同一子句中的分组键(即非聚合表达式)。
因此:

  • WITH p1, p2, interest, COUNT(interest) AS conto中:
  • conto是与p1p2interest值的每个唯一集合相关联的interest节点的数量。
  • RETURN p1.name, p2.name, COUNT(interest), conto, COLLECT(interest.name) AS interessi中:
  • COUNT(interest)是与p1.namep2.nameconto值的每个唯一集合相关联的interest节点的数量。
  • interessi是与p1.namep2.nameconto值的每个唯一集合相关联的interest.name值的集合。

总之,由于#1和#2具有不同的分组键,因此COUNT(interest)值也不同。

相关问题