我很难写一个查询,它将返回每个用户播放的最多曲目的信息。我用这样的东西:
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)
这给了我由一个最喜爱的艺术家播放的曲目数为给定的用户,但我怎么能加入适当的艺术家的名字到这个结果?值得一提的是,每个用户可能有一个以上的最喜爱的艺术家.
有任何线索/提示吗?非常感谢!
1条答案
按热度按时间gopyfrb31#
这将是我的方法。
第二行计算每个listner-artist对的scrobble数。
第三行和第四行收集了所有艺术家,这些艺术家为每个听众提供了该数量的Scrobble,并按Scrobble计数降序排序。
第五行将numberOfScrobbles和艺术家收集到列表中,这样每个listner就有一行。
最后三行返回listner名称以及scrobbleCountList和artistsList中的第一个值。