如何在Neo4j中计算排名 [英] How to calculate a rank in Neo4j
问题描述
我有两种类型的节点(游戏和玩家)和一种关系(已播放).
已播放关系具有属性点".
样本数据:
玩家(309274)拿下10分
玩家(309275)取得20分
玩家(309276)得分30
玩家(309277)得分40分
玩家(309278)得分50分
我想从密码查询中计算播放器的排名 309278,即5.有人可以帮我在这里生成密码查询吗?
I am having two types of nodes (game & player) and one relationship (PLAYED).
PLAYED relationship is having a property 'points'.
Sample Data:
Player (309274) scored 10 points
Player (309275) scored 20 points
Player (309276) scored 30 points
Player (309277) scored 40 points
Player (309278) scored 50 points
I want to calculate a rank of a Player 309278 i.e. 5 from the cypher query. Can anybody help me here to generate cypher query?
推荐答案
MATCH (p:Player)-[pl:PLAYED]->(:Game {id:{game-id}})
RETURN p.name
ORDER BY pl.score desc
那么行号就是您的排名,客户可以轻松计算出
then the row-number is your rank, which your client can compute easily
访问某个等级:
MATCH (p:Player)-[pl:PLAYED]->(:Game {id:{game-id}})
RETURN p.name
ORDER BY pl.score desc
SKIP 4 LIMIT 1
要计算排名,您可能会执行以下操作(效率不高):
to compute the rank, you'd probably, do something like this (not efficient):
MATCH (p:Player)-[pl:PLAYED]->(:Game {id:{game-id}})
WITH p,pl
ORDER BY pl.score desc
// create a a collection
WITH collect(p) as players
UNWIND reduce(acc=[],idx in range(0,size(players)-1) |
acc + [idx+1,players[idx]]) as player_rank
RETURN player_rank
这篇关于如何在Neo4j中计算排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!