2015-05-14 1 views
1

у меня есть запрос, который выглядит следующим образом:Построение запроса, который имеет некоторые расчетные значения, неожиданно меняет # строк

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 узел проекта и 2 узла ОС, с некоторыми # узлами TestRun, связанными с каждым узлом ОС).

Однако, когда я добавляю на различные части ROUND (AVG (...)), я получаю намного больше строк. Я думаю, что я получаю дополнительные строки для каждой отдельной комбинации всех возвращаемых значений.

Я бы хотел сохранить 2 возвращенных строки с добавлением столбцов, содержащих вычисления. Я не уверен, что мне нужно сделать, чтобы изменить запрос, чтобы выполнить это.

Если есть дополнительная информация, которую мне нужно поделиться, чтобы сделать это более ясным, сообщите мне.

ответ

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, поэтому они совсем не были агрегированы.

+0

Да - работает отлично. Это очень тонкая разница. Я сидел здесь, глядя на свою версию и твою в течение примерно 15 минут, прежде чем щелкнул. Спасибо! –

Смежные вопросы