Мне трудно понять, как правильно использовать агрегатные функции в Cypher.
Допустим, у меня есть узлы, помеченные как Animal
, со свойствами size
и species
. Для каждого вида я хочу получить самый большой.
Пока я понимаю, что могу сделать это со следующим:
MATCH (n:Animal)
WITH n.species as species, max(n.size) as size
RETURN species, size
И я эффективно получу самые большие размеры с соответствующими видами .
Но как я могу получить узлы вместо видов?
Я не могу вернуть n
из-за оператора WITH
и не могу вставить его в WITH
потому что это нарушит агрегацию species
.
Я знаю, что этот вопрос уже задавался несколько раз, но различные решения, с которыми я столкнулся, были специфичны для конкретного случая c и использовали отношения
Любой совет очень приветствуется
РЕДАКТИРОВАТЬ: я наконец-то заставил его работать с:
MATCH (n:Animal)
WITH n.species as species, max(n.size) as size, collect(n) as ns
UNWIND ns as n
WITH n
WHERE n.size = size
RETURN n
Является ли это Cypher-способ урегулирования вещей? Мне кажется, это многословно и неэффективно (все узлы извлекаются здесь), разве нет более простого варианта?