Cypher - Как переносить переменные через канал WITH

У меня есть следующий запрос:

START e1=node:event(prop="0")
MATCH e1-[r:rbel]->e2
WITH e1, e2, count(e1) as ecount
MATCH e1-[:redge]->p<-[:redge]-e2
WITH p.element_type as Type, p.label as Label, (count(p)*100./ecount) as percentage
WHERE percentage > 20
RETURN Type, Label, ROUND(percentage) as Percentage

Я пытаюсь вычислить процент случаев, когда указанный шаблон встречается в событиях с prop="0"по всем шаблонам, происходящим в тех событиях.

Я получаю следующую ошибку: Unknown identifier 'ecount'

Поэтому я заменил ecount в расчете с count(ecount)и что последовательно уступало percentageс 100%, что я знаю, чтобы быть правдой.

Я иду по этому поводу неправильно? Как я могу нести ценность ecount к WITH пункт и использовать его в расчете?

Любая помощь приветствуется!

2 ответа

Решение

Этот запрос работает для вас? Всякий раз, когда я объединяю e1 а также count(e1) в WITH заявление, count(e1) всегда 1. Я думаю, это потому, что count(e1) агрегация больше не работает при выборе e1, тоже. Либо вы пропустите e1 или count(e1),

START e1=node:event(prop="0")
MATCH e1-[r:rbel]->e2
WITH e1, e2
MATCH e1-[:redge]->p<-[:redge]-e2
WITH p.element_type as Type, p.label as Label, (count(p)*100./count(e1)) as percentage
WHERE percentage > 20
RETURN Type, Label, ROUND(percentage) as Percentage

ОБНОВЛЕНИЕ После того, как вы поиграли с предоставленной вам консольной установкой, я получил следующий запрос:

START e1=node:node_auto_index(prop="0") 
MATCH e1-[r:rbel]->e2 
WITH COLLECT(e2) AS e2collection, count(e1) AS cnt 
MATCH e1-[:redge]->p<-[:redge]-(e2) 
WITH p, COLLECT(e1) AS e1collection, cnt, e2collection 
WITH p.name AS Name, cnt, count(p)*100/cnt AS Percentage 
WHERE Percentage > 20 
RETURN Name, Percentage

Решение h3nrik отлично сработало в приведенном ниже примере настройки консоли, однако по какой-то причине оно не сработало при применении к моим фактическим данным в моем браузере данных localhost. Я нашел следующий обходной путь, несмотря на более медленное время запроса:

START e1=node:event(prop="0") 
MATCH e1-[:rbel]->e2 
WITH count(e1) as ecount
START e1=node:event(prop="0") 
MATCH e1-[:rbel]->e2, e1-[:redge]->p<-[:redge]-(e2)
WITH p.label AS Label, p.element_type as Type, ecount, count(p)*100./ecount AS percentage 
WHERE percentage > 20 
RETURN Label, Type, ROUND(percentage) as Percentage
Другие вопросы по тегам