过滤已过滤的Cypher查询结果

时间:2013-02-15 20:31:25

标签: neo4j cypher

嗨,这是我当前的查询,我想'重新过滤':

START movie = node(*)
MATCH user-[:LIKE]->category-[:SIMILAR*0..3]-()<-[:TAGGED]->movie
WHERE user.name = "current_user"

WITH DISTINCT movie, user, category

RETURN user.name, category.name, ID(movie), movie.name
ORDER BY movie.name;

http://console.neo4j.org/r/u19iim

以下是当前查询后的样子:

+--------------+----------------+-----------+-------------------------+
| user.name    | category.name  | ID(movie) | movie.name              |
+--------------+----------------+-----------+-------------------------+
| current_user | c              | 14        | movie_c_and_d_and_e     |
| current_user | d              | 14        | movie_c_and_d_and_e     |
| current_user | e              | 14        | movie_c_and_d_and_e     |
| current_user | a              | 9         | movie_of_a_and_b_and_b1 |
| current_user | b              | 9         | movie_of_a_and_b_and_b1 |
| current_user | b              | 10        | movie_of_b2_first       |
| current_user | b              | 11        | movie_of_b2_second      |
| current_user | c              | 12        | movie_of_c              |
| current_user | d              | 13        | movie_of_d_and_e        |
| current_user | e              | 13        | movie_of_d_and_e        |
+--------------+----------------+-----------+-------------------------+

我想GROUP BY COUNT(sugg) AS category_count提取这个:

+--------------+----------------+-----------+-------------------------+
| user.name    | category_count | ID(movie) | movie.name              |
+--------------+----------------+-----------+-------------------------+
| current_user | 3              | 14        | movie_c_and_d_and_e     |
| current_user | 2              | 9         | movie_of_a_and_b_and_b1 |
| current_user | 2              | 13        | movie_of_d_and_e        |
| current_user | 1              | 10        | movie_of_b2_first       |
| current_user | 1              | 11        | movie_of_b2_second      |
| current_user | 1              | 12        | movie_of_c              |
+--------------+----------------+-----------+-------------------------+

我该如何做到这一点?

类似的问题: - how to have two aggregation in cypher query in neo4j?

更新
这是工作结果(使用demo:http://tinyurl.com/cywlycc):

START movie = node(*)
MATCH user-[:LIKE]->category-[:SIMILAR*0..3]-()<-[:TAGGED]->movie
WHERE user.name = "current_user"
WITH DISTINCT movie, category WITH COUNT(movie) AS category_count, movie, collect(category.name) as categorized
RETURN category_count, ID(movie), movie.name, categorized
ORDER BY category_count DESC;

1 个答案:

答案 0 :(得分:2)

START movie = node(*) 
MATCH user-[:LIKE]->category-[:SIMILAR*0..3]-()<-[:TAGGED]->movie 
WHERE user.name = "current_user" 
WITH DISTINCT movie, user, category 
RETURN user.name, count(category.name) as category_count, ID(movie), movie.name 
ORDER BY category_count desc, movie.name asc

http://console.neo4j.org/r/69rfkn