构建具有某些计算值的查询,意外更改了行数
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
的所有使用,因此它们根本不是真正的聚合。
我有一个如下所示的查询:
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
的所有使用,因此它们根本不是真正的聚合。