【问题标题】:How to find top 10 sum of each match?如何找到每场比赛的前10名总和?
【发布时间】:2016-02-03 02:46:58
【问题描述】:

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

X -[ W ]-> Y

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

我希望每个 Y 的前十个 X 具有属性 sum(W.property)

如果我回来

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

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

有没有办法做到这一点?

【问题讨论】:

    标签: database neo4j cypher graph-databases


    【解决方案1】:
    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 的值。如果你打算这样做,你甚至可以将地图结构更改为这样的数组:

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

    【讨论】:

    • 我稍微编辑了您的答案以修正一些拼写错误并在MATCH 子句之前添加以使其更清晰。但除此之外,这是一个非常好的解决方案。
    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2021-11-24
    • 2015-09-16
    • 1970-01-01
    • 2016-06-05
    • 2013-06-15
    • 2013-11-01
    • 2019-10-09
    相关资源
    最近更新 更多