Neo4j 分组方式并在cypher中添加值
我在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
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和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