如何在Neo4j中计算排名

Avi*_*ash 4 neo4j

在此处输入图片说明

我有两种类型的节点(游戏和玩家)和一种关系(已播放)。 PLAYED关系具有属性“点”。
样本数据:
玩家(309274)获得10分
玩家(309275)获得20分
玩家(309276)获得30分
玩家(309277)获得40分
玩家(309278)获得50分

我想计算玩家 309278 的排名,即5从密码查询。有人可以在这里帮助我生成密码查询吗?

Mic*_*ger 5

MATCH (p:Player)-[pl:PLAYED]->(:Game {id:{game-id}})
RETURN p.name
ORDER BY pl.score desc
Run Code Online (Sandbox Code Playgroud)

那么行号就是您的排名,客户可以轻松计算

访问某个等级:

MATCH (p:Player)-[pl:PLAYED]->(:Game {id:{game-id}})
RETURN p.name
ORDER BY pl.score desc
SKIP 4 LIMIT 1
Run Code Online (Sandbox Code Playgroud)

要计算排名,您可能会执行以下操作(效率不高):

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
Run Code Online (Sandbox Code Playgroud)