分组排序查询语句该怎么写?

提问参考模版:

  • nebula 版本:3.1
  • 部署方式:单机
  • 安装方式:Docker
  • 是否为线上版本: N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 有个分组排序的需求,Tag:player、team,Edge Type:service,关系 (:player)-[:service]->(:team),player Tag中有个拼音名称属性 py_name。
    现在想查询player101服役的球队中,player101在哪些球队的拼音名排序是在前10?
    这样的分组排序语句该怎么写?

我的一点思路,供参考,对player101所在的球队With 子句先使用order by 和limit查询所在球队的拼音前10,然后看player101在不在前10中?

1 个赞

我问题里少说了一点,player可以服役多个team。
我现在写不出分组取多个team前10player的语句,order by会把所有team下的所有player进行排序。

我请教下同事看看。


MATCH (v:player{name:“Aron Baynes”})-[:serve]->(n:team)<-[:serve]-(m:player)
WITH n, count(CASE WHEN v.name<=m.name THEN true ELSE false END) AS c WHERE c<10
RETURN collect(n.name)
我同事曹先生的解答

1 个赞

count()里面的值不论是true还是false,计数都加1了,怎样只统计true的值?

换成case表达式也是这个结果

ELSE null

1 个赞

建议改成年轻帅气的曹同事会好些

1 个赞

年轻帅气的曹同事牛逼,结案了。

再补一个问题,如果player101服役了100个球队,每个球队里有2万名球员,这条语句的性能会有问题吗?

那么多球员统计的话,性能应该会降一点。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。