我们有一个电影图。有演员,导演和电影。导演也可能在另一部电影,甚至是同一部电影中演过。我们给演员一个他每部电影的分数。我们还给导演一个他的每部电影的分数。现在,我们希望获得一份个人及其分数列表,从最高分到最低分。所以这些是我们目前的查询:
MATCH (p:Person)-[idr:IsDirectorOf]->(m:Movie)
RETURN p.name AS name, COUNT(idr) AS numberOfMoviesDirected
ORDER BY numberOfMoviesDirected DESC;
和
MATCH (p:Person)-[iai:IsActorIn]->(m:Movie)
RETURN p.name AS name, COUNT(iai) AS numberOfMoviesPlayed
ORDER BY numberOfMoviesPlayed DESC;
我想结合这些查询,将两个查询得分最高的人放在一起。此外,请注意我们稍后可能需要添加另一个查询,因此仅适用于两个查询的解决方案可能不是最好的。
答案 0 :(得分:0)
您应该尝试此查询:
MATCH (p:Person)
RETURN p, size((p:Person)-[:IsDirectorOf]->(:Movie)) + size((p:Person)-[:IsActorIn]->(:Movie)) AS score
ORDER BY score DESC
如果您想添加其他分数,只需使用WITH
继续查询。
干杯
<强>更新强>
要回复您的评论,这是查询:
MATCH (p:Person)
WITH
max(size((p)-[:IsActorIn]->())) As maxActed,
max(size((p)-[:IsDirectorOf]->())) AS maxDirected
MATCH (p:Person)
RETURN
p,
size((p)-[:IsActorIn]->(:Movie)) / toFloat(maxActed) + size((p)-[:IsDirectorOf]->(:Movie)) / toFloat(maxDirected) AS score
ORDER BY score DESC