Neo4J -如何选择具有最大计数的记录

2ul0zpep  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(138)

我很难写一个查询,它将返回每个用户播放的最多曲目的信息。我用这样的东西:

match (l:Listener)-[lo:LOGS]->(s:Scrobble)-[f:FEATURES]->(t:Track)<-[p:PERFORMS]-(a:Artist) with l, a, count(*) as numberofScrobbles return l.name, a.title, numberofScrobbles

并获取一个值列表:用户名-艺术家名称-由给定艺术家创建的scrobbled曲目数。
我的目标是获得最喜爱的艺术家为每个用户(艺术家与最scrobbles为每个用户).和它值得注意的是,为对方,一个以上的艺术家可能与最scrobbles.最接近我得到的是与此:

match (l:Listener)-[lo:LOGS]->(s:Scrobble)-[f:FEATURES]->(t:Track)<-[p:PERFORMS]-(a:Artist) with l,a,count(*) as numberofScrobbles return l.name, max(numberOfScrobbles)

这给了我由一个最喜爱的艺术家播放的曲目数为给定的用户,但我怎么能加入适当的艺术家的名字到这个结果?值得一提的是,每个用户可能有一个以上的最喜爱的艺术家.
有任何线索/提示吗?非常感谢!

gopyfrb3

gopyfrb31#

这将是我的方法。

MATCH (l:Listener)-[lo:LOGS]->(s:Scrobble)-[f:FEATURES]->(t:Track)<-[p:PERFORMS]-(a:Artist)
WITH l, a, count(*) AS numberOfScrobbles
WITH l, numberOfScrobbles, collect(a.title) AS artists
ORDER BY numberOfScrobbles DESC
WITH l, collect(numberOfScrobbles) AS scrobbleCountList, collect(artists) AS artistsList
RETURN l.name as listnerName, 
scrobbleCountList[0] as highestScrobbleCount, 
artistsList[0] as artists

第二行计算每个listner-artist对的scrobble数。

l        a                  numberOfScrobbles
Nathan   Lang Lang          4
Nathan   Martha Argerich    3
Nathan   Sviatoslav Richter 4

第三行和第四行收集了所有艺术家,这些艺术家为每个听众提供了该数量的Scrobble,并按Scrobble计数降序排序。

l       numberOfScrobbles artists
Nathan  4                 ["Lang Lang", "Sviatoslav Richter"]
Nathan  3                 ["Martha Argerich"]

第五行将numberOfScrobbles和艺术家收集到列表中,这样每个listner就有一行。

l       scrobbleCountList artistsList
Nathan  [4, 3]            [["Lang Lang", "Sviatoslav Richter"], ["Martha Argerich"]]

最后三行返回listner名称以及scrobbleCountList和artistsList中的第一个值。

l      highestScrobbleCount artists
Nathan 4                    ["Lang Lang", "Sviatoslav Richter"]

相关问题