Neo4j 分组方式并在cypher中添加值

Neo4j 分组方式并在cypher中添加值,neo4j,group-by,sum,cypher,Neo4j,Group By,Sum,Cypher,我在neo4j(Cypher)上做了这个查询: 我的结果是: Yves 3 Yves 1 Alina 3 Alina 1 David 5 David 3 但是我想把我的结果分组,并把每个人的分数加起来。我想得到这样的答案: Yves 4 Alina 4 David 8 如何修改查询?您可以使用sum获取数值集合的总和,例如,您可以在CASE子句上运行它 MATCH (Person)-[KNOWS]->(Comp) WHERE Comp.name='EN' OR Comp

我在neo4j(Cypher)上做了这个查询:

我的结果是:

Yves 3

Yves 1

Alina 3

Alina 1

David 5

David 3
但是我想把我的结果分组,并把每个人的分数加起来。我想得到这样的答案:

Yves 4

Alina 4

David 8

如何修改查询?

您可以使用
sum
获取数值集合的总和,例如,您可以在
CASE
子句上运行它

MATCH (Person)-[KNOWS]->(Comp) 
WHERE Comp.name='EN' OR Comp.name='FR' OR Comp.name='CUI' 
RETURN Person.fname, SUM(  
    CASE Comp.name  
        WHEN 'EN'  THEN 5  
        WHEN 'FR'  THEN 3  
        WHEN 'CUI'  THEN 1  
        ELSE 0 
    END 
) AS Points_Candidat
我不知道上下文,但我想到了两个小的变化,它们会给你一个等价但稍微精简的查询:1)由于
WHERE
子句中的三个测试除了测试的值之外都是相同的,所以你可以将
in
操作符与一组值一起使用,而不是三项析取,2)由于三个
案例。。。当
值耗尽了在
WHERE
子句中绑定的内容的可能性时,所有绑定的节点将针对其中一种情况测试为true,因此您不需要
ELSE

MATCH (Person)-[KNOWS]->(Comp) 
WHERE Comp.name IN ['EN' ,'FR','CUI'] 
RETURN Person.fname, SUM(  
    CASE Comp.name  
        WHEN 'EN'  THEN 5  
        WHEN 'FR'  THEN 3  
        WHEN 'CUI'  THEN 1
    END 
) AS Points_Candidat
您也可以受益于使用标签和索引,除非“代码> COMP.Name <代码>映射到值与查询不同,您可以考虑将其作为属性添加到<代码> COMP和RealthMy.Fame,SUM(COMP.PositS.CydiDAT)

MATCH (Person)-[KNOWS]->(Comp) 
WHERE Comp.name IN ['EN' ,'FR','CUI'] 
RETURN Person.fname, SUM(  
    CASE Comp.name  
        WHEN 'EN'  THEN 5  
        WHEN 'FR'  THEN 3  
        WHEN 'CUI'  THEN 1
    END 
) AS Points_Candidat