1

質問:オプションの関係を使用せずに、1 つの Cypher クエリで 2 つの独立したパターンの出現をカウントするにはどうすればよいですか?

例:ソーシャル ネットワークに参加しているすべての人について、友人の数と作成した投稿の数を数えます。

オプションの関係を使用すると、簡単です...

人の友達を数える:

MATCH (person:PERSON)
WITH person
MATCH (person)-[?:KNOWS]-(friend:PERSON)
RETURN person.firstName AS name, count(friend) AS friends

+----------------------+
| name       | friends |
+----------------------+
| "alex"     | 3       |
| "aiya"     | 1       |
| "jacob"    | 1       |
| "peter"    | 1       |
| "stranger" | 0       |
+----------------------+

人の投稿を数える:

MATCH (person:PERSON)
WITH person
MATCH (person)<-[?:HAS_CREATOR]-(post:POST)
RETURN person.firstName AS name, count(post) AS posts

+--------------------+
| name       | posts |
+--------------------+
| "alex"     | 0     |
| "aiya"     | 3     |
| "jacob"    | 3     |
| "peter"    | 1     |
| "stranger" | 2     |
+--------------------+

人の友達と投稿を数える:

MATCH (person:PERSON)
WITH person
MATCH (person)-[?:KNOWS]-(friend:PERSON)
WITH person, count(friend) AS friends
MATCH (person)<-[?:HAS_CREATOR]-(post:POST)
RETURN person.firstName AS name, friends, count(post) AS posts

+------------------------------+
| name       | friends | posts |
+------------------------------+
| "peter"    | 1       | 1     |
| "aiya"     | 1       | 3     |
| "alex"     | 3       | 0     |
| "stranger" | 0       | 2     |
| "jacob"    | 1       | 3     |
+------------------------------+

ただしMATCH、オプションのリレーションシップがない場合、クエリの結果は、次の 2 つの句のいずれかでカウント結果がゼロのすべてのノードを除外します。

MATCH (person:PERSON)-[:KNOWS]-(friend:PERSON)
WITH person, count(friend) AS friends
MATCH (person)<-[:HAS_CREATOR]-(post:POST)
RETURN person.firstName AS name, friends, count(post) AS posts

+---------------------------+
| name    | friends | posts |
+---------------------------+
| "peter" | 1       | 1     |
| "aiya"  | 1       | 3     |
| "jacob" | 1       | 3     |
+---------------------------+

参考までに、望ましい結果は次のとおりです。

+---------------------------+
| name    | friends | posts |
+---------------------------+
| "alex"  | 3       | 0     |
| "peter" | 1       | 1     |
| "aiya"  | 1       | 3     |
| "jacob" | 1       | 3     |
+---------------------------+
4

1 に答える 1