2

我想执行这个查询

MATCH (p:Person)-->(s:Startup)
WITH DISTINCT p
MATCH (p)-->(s:Startup)-->(m:Market)
WITH DISTINCT p, s, m, COLLECT(m) as markets
ORDER BY id(s)
RETURN DISTINCT p, COUNT(DISTINCT s) as inv, 
                COLLECT({id: id(s), markets: markets}) as startups, 
                count (m) as mctotal
ORDER BY inv DESC
LIMIT 10

但我不明白为什么它不能正确地将初创公司与其市场聚合起来。这是我查询的结果:

+-----+-----+------------+---------+
|  p  | inv | startups   | mctotal |
+-----+-----+------------+---------+
|  p  |  11 | id: 1      |    7    |
|     |     | markets: 1 |         |
|     |     |            |         |
|     |     | id: 1      |         |
|     |     | markets: 2 |         |
|     |     |            |         |
|     |     | id: 2      |         |
|     |     | markets: 3 |         |
|     |     |            |         |
|     |     | id: 2      |         |
|     |     | markets: 4 |         |

... 等等。

我想要获得的结果如下:

+-----+-----+---------------+---------+
|  p  | inv | startups      | mctotal |
+-----+-----+---------------+---------+
|  p  |  11 | id: 1         |    7    |
|     |     | markets:[1,2] |         |
|     |     |               |         |
|     |     | id: 2         |         |
|     |     | markets:[3,4] |         |

我希望很清楚我的要求。

4

1 回答 1

1
  1. 不要在聚合中使用 distinct
  2. 不要将您返回的相同值聚合为简单值(这是您的主要问题)
  3. 不匹配两次

这是一个应该更好的变体,您没有分享您的示例图,所以我无法尝试

 MATCH (p)-->(s:Startup)-->(m:Market)
 WITH p, s, COLLECT(m) as markets, count(m) as mcount
 ORDER BY id(s)
 RETURN p, COUNT(DISTINCT s) as inv, 
           COLLECT({id: id(s), markets: markets}) as startups, 
           sum(mcount) as mctotal
 ORDER BY inv DESC
 LIMIT 10
于 2014-10-12T11:42:41.307 回答