怎么用一条查询语句输出多个聚合结果

  • 问题的具体描述

假设这样的场景,点player之间有两种边,follow和like
我想通过一条查询语句输出,一个player 分别follow了哪些 player 、like了哪些player
返回包括三个字段:playerID, followIDs, likeIDs

统计一种边可以使用GROUP BY

GO FROM "player100" OVER follow \
        YIELD $^.id AS playerID, $$.id as followID \
        | GROUP BY $-.playerID \
        YIELD $-.playerID  as playerID, collect($-.followID) AS followIDs;

如果统计两种边,是不是要写成这样

GO FROM "player100" OVER follow \
        YIELD follow._src AS playerID, follow._dst AS followID \
        | GROUP BY $-.playerID \
        YIELD $-.playerID  as playerID, collect($-.followID) AS followIDs \
        | GO FROM playerID OVER like \
       YIELD $-.playerID  as playerID,  $-.followIDs AS followIDs, like._dst AS likeID \
        | GROUP BY $-.playerID,  $-.followIDs \
        YIELD $-.playerID  as playerID,  $-.followIDs AS followIDs, collect($-.likeID) AS likeIDs \

感觉有点浪费性能,有没有更加优雅的写法

MATCH (f)<-[:follow]-(v)-[:like]->(l)
WHERE id(v)=="vid"
RETURN id(v) AS playerId, collect(distinct id(f)) AS followerIds, collect(distinct id(l)) AS likerIds
go from "vid" over follow yield $^.id as playerId, $$.id as followerId 
| go from $-.playerId over like yield $-.playerId as playerId, $-.followerId as followerId, $$.id as likerId
| yield $-.playerId as playerId, collect(distinct $-.followerId) as followerIds, collect(distinct $-.likerId) as likerIds

1 个赞

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