使用RETURN语句中的计算进行Neo4J查询

使用RETURN语句中的计算进行Neo4J查询,neo4j,cypher,Neo4j,Cypher,我有一个简单的模型: (teacher)-[:HAD]->(contract)-[:WITH]-(school) 一名教师可以与同一所学校或其他学校签订多份合同。现在,合同上的一个属性是{leadership:'Senior Leader'},我试图查询所有高级领导,以了解他们与多少所学校签订了合同 //FIND ALL HEADS AND NUMBER OF SCHOOLS THEY WENT TO MATCH (t:Teacher) WHERE (t)-[:HAD]->(:Co

我有一个简单的模型:

(teacher)-[:HAD]->(contract)-[:WITH]-(school)
一名教师可以与同一所学校或其他学校签订多份合同。现在,合同上的一个属性是
{leadership:'Senior Leader'}
,我试图查询所有高级领导,以了解他们与多少所学校签订了合同

//FIND ALL HEADS AND NUMBER OF SCHOOLS THEY WENT TO
MATCH (t:Teacher)
WHERE (t)-[:HAD]->(:Contract {leadership: 'Head'})
MATCH (t)-[:HAD]->(:Contract)-[:WITH]->(s:School)
RETURN t,count(distinct(s)) as nr_of_schools
ORDER BY nr_of_schools DESC
我想在计算中使用
nr\u学校

toFloat(no_of_schools) / count(distinct(t))*100
ORDER BY toFloat(no_of_schools) / count(distinct(t))*100 DESC

本质上,我是在发现70%的班主任去了一所学校,20%的班主任去了两所学校,其余的去了三所学校之后。我想我可以使用
no\u of_schools
作为参数,但我认为这是不可能的。

您可以使用
进行中间计算:

//FIND ALL HEADS AND NUMBER OF SCHOOLS THEY WENT TO
MATCH (t:Teacher)
WHERE (t)-[:HAD]->(:Contract {leadership: 'Head'})
MATCH (t)-[:HAD]->(:Contract)-[:WITH]->(s:School)
WITH t,count(distinct(s)) as no_of_schools
RETURN toFloat(no_of_schools) / count(distinct(t))*100 AS ratio
ORDER BY ratio DESC
MATCH (t:Teacher)
WITH count(t) as tCount // don't need distinct here, but wouldn't hurt
MATCH (t:Teacher)
WHERE (t)-[:HAD]->(:Contract {leadership: 'Head'})
MATCH (t)-[:HAD]->(:Contract)-[:WITH]->(s:School)
WITH t,tCount,count(distinct(s)) as no_of_schools
RETURN toFloat(no_of_schools) / tCount*100 AS ratio
ORDER BY ratio DESC
如果要返回
t
,返回的比率需要稍微重写一下查询-不能同时返回变量和变量上的聚合-
返回t,则无法计数(t)

MATCH (t:Teacher)
WITH count(t) as tCount // don't need distinct here, but wouldn't hurt
MATCH (t:Teacher)
WHERE (t)-[:HAD]->(:Contract {leadership: 'Head'})
MATCH (t)-[:HAD]->(:Contract)-[:WITH]->(s:School)
WITH t,tCount,count(distinct(s)) as no_of_schools
RETURN toFloat(no_of_schools) / tCount*100 AS ratio
ORDER BY ratio DESC