Neo4j 构造具有某些计算值的查询会意外地更改行的#

Neo4j 构造具有某些计算值的查询会意外地更改行的#,neo4j,Neo4j,我有一个如下的查询: MATCH (d:Project)<-[:USING]-(t:TestRun)-[:ON]->(o:OS) WITH t, o, d RETURN count(t) as Number_Of_Runs, o.name as OS_Name, d.name as Source_Branch, ROUND(avg(t.failing_tests)/t.tests_run * 100) as Average_Pct_Failing, ROUND(avg(t.passi

我有一个如下的查询:

MATCH (d:Project)<-[:USING]-(t:TestRun)-[:ON]->(o:OS)
WITH t, o, d
RETURN count(t) as Number_Of_Runs, o.name as OS_Name, d.name as Source_Branch, ROUND(avg(t.failing_tests)/t.tests_run * 100) as Average_Pct_Failing,
ROUND(avg(t.passing_tests)/t.tests_run * 100) as Average_Pct_Passing,
ROUND(avg(t.skipped_tests)/t.tests_run * 100) as Average_Pct_Skipped
匹配(d:Project)(o:OS)
用t,o,d
返回计数(t)作为运行次数,o.name作为操作系统名称,d.name作为源分支,四舍五入(平均(t.tests失败)/t.tests运行*100)作为平均(Pct失败),
四舍五入(平均(t.通过测试)/t.测试运行*100)作为平均通过率,
四舍五入(平均值(跳过的测试)/t测试运行*100)为跳过的平均值
当我仅运行查询的一部分时:

MATCH (d:Project)<-[:USING]-(t:TestRun)-[:ON]->(o:OS)
WITH t, o, d
RETURN count(t) as Number_Of_Runs, o.name as OS_Name, d.name as Source_Branch
匹配(d:Project)(o:OS)
用t,o,d
返回计数(t)作为运行次数,o.name作为操作系统名称,d.name作为源分支
考虑到我拥有的数据,我得到了2行(1个项目节点和2个操作系统节点,其中一些TestRun节点与每个操作系统节点相关)

然而,当我添加不同的ROUND(AVG(…)部分时,我最终得到了更多的行。我想,对于所有返回值的每个不同组合,我都会得到额外的行

我想要的是继续获得返回的2行,并添加包含计算的列。我不确定我需要做什么来更改查询以实现这一点


如果有一些额外的信息需要我分享以使这更清楚,请让我知道。

这对您有用吗

MATCH (d:Project)<-[:USING]-(t:TestRun)-[:ON]->(o:OS)
RETURN count(t) AS Number_Of_Runs,
  o.name AS OS_Name, d.name AS Source_Branch,
  ROUND(avg(toFloat(t.failing_tests)/t.tests_run)* 100) AS Average_Pct_Failing,
  ROUND(avg(toFloat(t.passing_tests)/t.tests_run)* 100) AS Average_Pct_Passing,
  ROUND(avg(toFloat(t.skipped_tests)/t.tests_run)* 100) AS Average_Pct_Skipped;
匹配(d:Project)(o:OS)
返回计数(t)作为运行次数,
o、 名称为OS_name,d.name为Source_Branch,
四舍五入(平均值(toFloat(t.测试失败)/t.测试运行)*100)作为平均值(Pct)失败,
四舍五入(平均值(toFloat(t.通过测试)/t.测试运行)*100)作为平均通过率,
四舍五入(平均值(toFloat(跳过测试)/测试运行)*100)作为跳过的平均值;
演示此查询


您最初的查询有一个非常微妙的问题。您最初使用聚合函数
avg()
的术语不包括
t
的所有用法,因此它们根本就不是真正的聚合。

Yes-非常有效。这确实是一个非常微妙的区别。我坐在这里看了大约15分钟我和你的版本,然后它点击了。非常感谢。