#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 до размера списка, вы можете использовать этот индекс, чтобы получить узел ресторана из списка по порядку и вернуть то же самое с деталями ресторана.