Cypher Neo4j ORDER BY DESC查询

fir*_*aga 5 neo4j cypher

我想按降序排列COUNT(Movie.title).但它给出了一个错误.这是查询.

MATCH (Movie {genre:"Action"})<-[:ACTS_IN]-(Person)
                 "RETURN Person.name, Movie.genre,  COUNT(Movie.title)"
                 "ORDER BY COUNT(Movie.title) DESC"
                 "LIMIT 100";
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mic*_*ger 10

您可以使用此查询:

MATCH (movie:Movie {genre:"Action"})<-[:ACTS_IN]-(person:Person)
RETURN person.name, movie.genre,  COUNT(distinct movie.title) AS cnt
ORDER BY cnt DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)


Joh*_*k13 1

返回错误是因为您无法在 Cypher 中立即按聚合排序。要按任何聚合排序,您需要使用WITH运算符。

所以你的查询应该是(假设你想列出每个演员每个流派的标题):

MATCH (Movie {genre:"Action"})<-[:ACTS_IN]-(Person)
RETURN Person.name, Movie.genre,  COUNT(Movie.title)
WITH Person.name AS name, Movie.genre AS genre, COLLECT(Movie.title) AS titles
RETURN name, genre, titles
ORDER BY LENGTH(titles) DESC
LIMIT 100
Run Code Online (Sandbox Code Playgroud)

限制 100 现在已更改其行为,因此您可能希望将其移至查询中:

MATCH (Movie {genre:"Action"})<-[:ACTS_IN]-(Person)
RETURN Person.name, Movie.genre,  COUNT(Movie.title)
WITH Person, Movie
LIMIT 100
WITH Person.name AS name, Movie.genre AS genre, COLLECT(Movie.title) AS titles
RETURN name, genre, titles
ORDER BY LENGTH(titles) DESC
Run Code Online (Sandbox Code Playgroud)

另外:为了使查询表现良好,您应该在 Movie.genre 属性上有一个索引,并且应该为 Movie 和 Person 引入标签。