我刚刚开始使用Neo4j,如果你愿意,可以踢轮胎,但我得到了一个我没想到的数量。
我有一个虚拟数据库,有999名员工做过费用索赔(26901 - 我知道这是一个奇数,我有一个循环运行插入虚拟费用索赔使用setInterval在javascript中随机声明随机员工,我忘了阻止它:S:))。
目标: 我想知道有多少员工在我的数据库中提出了费用索赔。
我开始使用以下查询:
MATCH (ex:EXPENSE)<-[:MADE_EXPENSE_CLAIM]-(employee:Employee)-[:WORKS_IN]->(:Department)
RETURN COUNT(employee)`
然而,由于我的计数,我得到了20211,这看起来有点高。
如果我以不同的方式运行查询,我会得到更有意义的结果(结果为918):
MATCH (n:Employee)-[:WORKS_IN]->(:Department)
WHERE (n)-[:MADE_EXPENSE_CLAIM]->()
RETURN COUNT(n)`
有谁能告诉我我的两个查询在做什么以及哪一个(如果有的话)实际上实现了我的目标?如果没有,请你更正我的问题?
答案 0 :(得分:1)
您的第一个查询会返回部门中所有员工的费用索赔总数。
您的第二个查询会返回已作出费用索赔的部门中的员工数量。
要简单地返回已经做出费用索赔的不同员工的数量,您可以做这样的事情......
MATCH (ex:EXPENSE)<-[:MADE_EXPENSE_CLAIM]-(employee:Employee)
RETURN count(DISTINCT employee)
要查看每位员工的费用索赔数量,您可以执行此类操作。行数将是已作出费用索赔的不同员工的数量。如果MADE_EXPENSE_CLAIM
仅指向费用,则可以通过删除Expense
节点的标签来节省查询中的一些开销。
MATCH ()<-[:MADE_EXPENSE_CLAIM]-(employee:Employee)
RETURN employee.name, count(*)