Похоже, вы близки, вам просто нужно убедиться, что вы используете ту же переменную, что и ранее (numCit
), и убедиться, что ваш расчет для numCit
соответствует цитированию на бумагу на автора,поэтому вам нужно включить p
в ваше предложение WITH, поскольку агрегаты сгруппированы по переменным, не относящимся к агрегации.
Также будет более эффективно использовать размер () отношений: CITED_BY, а нечем помещать их в ваш шаблон, так как это использует более эффективный расчет степени (узлы знают количество связей по типу / направлению), однако вы можете сделать это ТОЛЬКО если только: Узлы бумаги могут ссылаться друг на друга (если есть другие типыузлы, которые могут ссылаться на статьи, тогда вы не можете сделать эту оптимизацию).Это также гарантирует, что вы примете во внимание документы, которые не имеют ссылок.
Ваш запрос будет выглядеть примерно так:
MATCH (p:Paper)-[:WRITTEN_BY]->(a:Author)
WITH a, p, size((p)-[:CITED_BY]->()) as numCit
WITH a, min(numCit) as minCitations
RETURN a.authorName as authorName, minCitations
ORDER BY a.authorName
РЕДАКТИРОВАТЬ
Для возврата обоихминимальное количество цитат для автора, а также строка на статью и количество цитат, вам нужно будет собрать бумагу вместе с ее количеством цитат одновременно с вычислением минимума (поэтому переменная a
: Authorявляется единственной неагрегирующей переменной в области видимости).Тогда вы сможете РАСКРЫТЬ коллекцию и спроецировать:
MATCH (p:Paper)-[:WRITTEN_BY]->(a:Author)
WITH a, p, size((p)-[:CITED_BY]->()) as numCit
WITH a, min(numCit) as minCitations, collect(p {.title, numCit}) as papers
UNWIND papers as paper
RETURN a.authorName as authorName, minCitations, paper.title as title, paper.numCit as numCit
ORDER BY authorName