如何在Neo4j中计算排名 [英] How to calculate a rank in Neo4j

查看:82
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆