构建具有某些计算值的查询,意外更改了行数

Constructing a query that has some calculated values, unexpectedly changes the # of rows

我有一个如下所示的查询:

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

当我运行只查询了一部分:

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

根据我拥有的数据(1 个项目节点和 2 个 OS 节点,每个 OS 个节点)。

但是,当我添加各种 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;

Here is a console 演示此查询。

您的原始查询存在一个非常细微的问题。您使用聚合函数 avg() 的原始术语不包括 t 的所有使用,因此它们根本不是真正的聚合。