Neo4J: добавление ранжирования чисел к упорядоченному выводу

#neo4j #cypher

#neo4j #cypher

Вопрос:

Допустим, существует следующий запрос:

 MATCH(r: Restaurant)
WITH r.restaurantName AS `Restaurant name`, r.restaurantFoodRating AS `Restaurant food rating`
ORDER BY `Restaurant food rating` DESC
RETURN `Restaurant name`, `Restaurant food rating`
  

Он возвращает следующее:

Строка 1 "Fat Bob's", 10

Строка 2 "Slim Jim's", 9.8

Строка 3 "Quick Rick's", 8.7

Я хочу, чтобы мой вывод имел номер, основанный на рейтинге ресторана. Ресторан с самым высоким рейтингом — Fat Bob’s, поэтому он должен иметь ранг 1.

Желаемый результат:

Строка 1 "Fat Bob's", 10, 1

Строка 2 "Slim Jim's", 9.8, 2

Строка 3 "Quick Rick's", 8.7, 3

Каков наилучший способ реализовать это?

Ответ №1:

Вы можете использовать COLLECT и UNWIND реализовать то же самое.

 MATCH(r: Restaurant)
WITH r ORDER BY r.restaurantFoodRating DESC
WITH COLLECT(r) as rs
UNWIND range(1, size(rs)) as rank
WITH rs[rank-1] AS r, rank
RETURN r.restaurantName AS `Restaurant name`, r.restaurantFoodRating AS `Restaurant food rating`, rank
  

Здесь мы заказали рестораны, используя WITH , COLLECT создадим упорядоченный список. UNWIND будет зацикливаться на диапазоне от 1 до размера списка, вы можете использовать этот индекс, чтобы получить узел ресторана из списка по порядку и вернуть то же самое с деталями ресторана.