在Neo4j中添加来自单独查询的分数

时间:2017-06-20 21:35:42

标签: database neo4j cypher aggregate graph-databases

假设我有两个表作为两个单独的Cypher查询的结果:

第一张表:

login score

abc 10

def 20

第二张表:

login score

abc 50

ghi 100

我需要一个表格,其中两个表格中存在的登录分数相加,而对于其他登录,它们会列出可用的单个分数。

login score

abc 60

def 20

ghi 100

您能帮助Cypher查询吗?如果我想应用自定义聚合函数而不是简单求和,该怎么办?

1 个答案:

答案 0 :(得分:0)

如果您拥有大型数据集,这将不会超级高效,但以下内容将起到作用:

MATCH (c:Choice)
WITH collect(c.login) AS cset
MATCH (t:Thing)
WHERE NOT t.login IN cset
RETURN t.login AS login, t.score AS score

UNION ALL

MATCH (t:Thing)
WITH collect(t.login) AS tset
MATCH (c:Choice)
WHERE NOT c.login IN tset
RETURN c.login AS login, c.score AS score

UNION ALL

MATCH (c:Choice),(t:Thing {login: c.login})
RETURN c.login AS login, c.score + t.score AS score;

可能有更有效的方法来做到这一点,但

  1. 第一部分为您提供仅在Thing-nodes
  2. 中登录的分数
  3. 第二部分为您提供仅在Choice-nodes
  4. 中登录的分数
  5. 第三部分总结两种节点类型中存在的登录分数。
  6. UNIONs将它们连接在一起。
  7. 希望这有帮助, 汤姆