Рассчитать долю записей, которые соответствуют определенному критерию в агрегации Cypher - PullRequest
1 голос
/ 25 марта 2019

Представьте, что у меня есть график, который я запрашиваю так:

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

Я предполагаю, что этот вопрос сводится к тому, как я могу суммировать список логических значений в шифре. Часть деления на размер агрегации проста. Я имею в виду, что полный запрос будет выглядеть так:

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 Ответ

1 голос
/ 25 марта 2019

Что вы ищете, этот запрос:

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, чтобы показать вам разные шаги.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...