构造具有一些计算值的查询,意外地更改了行数

时间:2015-05-14 22:45:22

标签: 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.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

我得到了2行,这是我所期望的,考虑到我拥有的数据(1个Project节点,2个OS节点,以及与每个OS节点相关的一些TestRun节点)。

然而,当我添加各种ROUND(AVG(...))部分时,我最终会有更多行。我想我为所有返回值的每个不同组合获得了额外的行。

我想要的是继续获取​​2个返回的行,并添加包含计算的列。我不确定我需要做些什么才能更改查询以实现这一目标。

如果我需要分享一些其他信息以便更清楚,请告知我们。

1 个答案:

答案 0 :(得分:1)

这对你有用吗?

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的所有用法,因此它们根本不是真正的聚合。