我有一个如下所示的查询:
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个返回的行,并添加包含计算的列。我不确定我需要做些什么才能更改查询以实现这一目标。
如果我需要分享一些其他信息以便更清楚,请告知我们。
答案 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
的所有用法,因此它们根本不是真正的聚合。