#neo4j #cypher
#neo4j #cypher
Вопрос:
Представьте, что у меня есть график, который я запрашиваю следующим образом:
MATCH (n:Class)-[:HAS]->(i:Item)
RETURN n.id as Id1, i.id as IdI, i.isWhatever as Criterion
получение
IdC IdI Criterion
A 1 False
A 2 True
B 1 True
Мой желаемый результат был бы
IdC ratioCriterion
A 0.5
B 1
Я предполагаю, что этот вопрос сводится к тому, как я могу суммировать список логических значений в cypher. Часть деления на размер агрегации проста. Я имею в виду, что полный запрос будет выглядеть как:
MATCH (n:Class)-[:HAS]->(i:Item)
WITH n.id as Id1, count_number_of_True_values / count(*) as ratioCriterion
Но я просто не знаю, как записать count_number_of_True_values
бит.
Ответ №1:
Вы ищете этот запрос :
MATCH (n:Class)-[:HAS]->(i:Item)
WITH n.id as Id1, i.id as IdI, i.isWhatever as Criterion
WITH Id1, CASE WHEN Criterion THEN 1 ELSE 0 END AS numCrit
WITH Id1, collect(numCrit) AS crits
RETURN Id1, reduce(s = 0, x IN crits | s x)/toFloat(size(crits))
Я делаю много WITH
, чтобы показать вам различные шаги.
Приветствия
Комментарии:
1. Большое спасибо. Я думаю, что для удобства чтения я бы просто удалил вторую строку и написал вторую так:
WITH n.id as Id1, CASE WHEN i.isWhatever THEN 1 ELSE 0 END AS numCrit
.