database - 如何找到每场比赛的前10名?

标签 database neo4j cypher graph-databases

我的意思是如果我有几个 X 和几个 Y 我做了这样的比赛:

X -[ W ]-> Y

X 和 Y 由几个 W 相关(相同对 (X,Y) 之间可以有多个 W)

对于每个具有属性 sum(W.property) 的 Y,我想要前十个 X

如果我回来

return Y , sum(W.property) , X order by sum(W.property) desc Limit 10

我刚得到 10,但我需要每个 Y,

有办法吗?

最佳答案

MATCH X -[ W ]-> Y
WITH Y, sum(W.property) AS total, X
ORDER BY total DESC
WITH Y, collect({sum: total, X: X})[0..10] AS values
UNWIND values AS value
RETURN Y, value.sum, value.X

您实际上可以跳过 UNWIND 并将第二个 WITH 更改为 RETURN 如果您同意将其作为大批。这会更有效一些,因为您不会一遍又一遍地重复 Y 的值。如果您打算这样做,您甚至可以将 map 结构更改为这样的数组:

collect([total, X])[0..10]

关于database - 如何找到每场比赛的前10名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167609/

相关文章:

sql - 多次使用相同参数的 format() 动态查询

algorithm - 谁在FB上有更多的相关 friend

Neo4j 合并链出乎意料地慢

Neo4j 预期 Collection<T> 但在创建多个节点时是 Map

数据库功能依赖分解

database - 如何命名包含用于排序的整数的列?

mysql - 工作日计算查询-工作但无法理解

Neo4j 关系属性

java - org.apache.lucene.store.LockObtainFailedException : Lock obtain timed out: NativeFSLock@/var/database/schema/label/lucene/write. 锁

neo4j - Neo4J 约束中的非空属性