我现在开始接近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
不同。为什么?后者实际上是什么?
1条答案
按热度按时间pbpqsu0x1#
在
WITH
或RETURN
子句中,aggregating function(类似于COLLECT)聚合同一子句中的分组键(即非聚合表达式)。因此:
WITH p1, p2, interest, COUNT(interest) AS conto
中:conto
是与p1
、p2
和interest
值的每个唯一集合相关联的interest
节点的数量。RETURN p1.name, p2.name, COUNT(interest), conto, COLLECT(interest.name) AS interessi
中:COUNT(interest)
是与p1.name
、p2.name
和conto
值的每个唯一集合相关联的interest
节点的数量。interessi
是与p1.name
、p2.name
和conto
值的每个唯一集合相关联的interest.name
值的集合。总之,由于#1和#2具有不同的分组键,因此
COUNT(interest
)值也不同。