Получение максимума нескольких сумм - PullRequest
0 голосов
/ 24 апреля 2018

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

Вот так выглядят соответствующие данные, с которыми я работаю: enter image description here

Если отношение «COOKS» содержит свойство «популярность», то есть просто показатель «популярности» торта, и каждый торт «готовится» шеф-поваром (фиолетовые имена).

Моя конечная цель - вернуть узел шеф-повара, который имеет самые популярные блюда, что в моем случае достигается путем суммирования всех свойств «популярности» в отношениях, связанных с любым шеф-поваром, и получения максимального значения из все суммы. Пока что моя лучшая попытка была такой:

match (chef:Chef)-[r:COOKS]->(c:Cake) return sum(r.popularity), chef

и результат таблицы для меня выглядит так:

enter image description here

Так что теперь мне просто нужно получить максимальное значение всех этих сумм и вернуть только узел (ы) поваров, которые имеют эту максимальную сумму «популярности»

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Небольшое отклонение от решения Дэйва Беннета, вместо того, чтобы собирать каждого повара с их популярностью, мы можем собрать повара на их популярность (поэтому для каждого ряда мы будем иметь популярность, а затем сбор поварами с такой специфической популярностью), затем закажите их и вступите в борьбу со всеми поварами с самой высокой отчетливой популярностью. Это должно позволить вам обрабатывать галстуки.

MATCH (chef:Chef)-[r:COOKS]->(c:Cake) 
WITH chef, sum(r.popularity) AS popularity
WITH popularity, collect(chef) as chefs
ORDER BY popularity DESC
LIMIT 1
UNWIND chefs AS chef
RETURN chef, popularity
0 голосов
/ 24 апреля 2018

Вы можете просто взять запрос, отсортировать результаты в порядке убывания и ограничить возврат до первой строки.

MATCH (chef:Chef)-[r:COOKS]->(c:Cake) 
RETURN chef, sum(r.popularity) AS popularity
ORDER BY popularity DESC
LIMIT 1

Это даст вам только одного шеф-повара.В вашем примере я предполагаю, что вы хотели бы, чтобы Боб и Джон вернулись.

В этом случае выполните тот же поиск и упорядочите его в порядке убывания, но соберите результаты для каждого шеф-повара в упорядоченном списке от наиболее популярных донаименее популярный.Затем возвращайте только те строки списка, которые соответствуют самым популярным поварам.

MATCH (chef:Chef)-[r:COOKS]->(c:Cake) 
WITH chef, sum(r.popularity) AS popularity
ORDER BY popularity DESC
WITH COLLECT ([chef, popularity]) AS chefs
UNWIND chefs AS chef
WITH chef
WHERE chef[1] = chefs[0][1]
RETURN chef
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...