Graph 使用Cypher查找最受欢迎的低评级电影。合并查询

Graph 使用Cypher查找最受欢迎的低评级电影。合并查询,graph,neo4j,cypher,Graph,Neo4j,Cypher,我目前正在尝试使用电影的neo4j数据集示例创建一个查询。我想选择有很多标签(更受欢迎)的电影以及收视率较低的电影 我已经找到了如何找到最受欢迎的(高于平均水平): 还有如何得到那些音符较少的 MATCH ()-[r:RATED]->(m:MOVIE) WITH avg(r.rating) as avgrating MATCH ()-[r:RATED]->(m:MOVIE) WITH m.title as titlemovie, avgrating, avg(r.rating

我目前正在尝试使用电影的neo4j数据集示例创建一个查询。我想选择有很多标签(更受欢迎)的电影以及收视率较低的电影

我已经找到了如何找到最受欢迎的(高于平均水平):

还有如何得到那些音符较少的

MATCH ()-[r:RATED]->(m:MOVIE) 
WITH  avg(r.rating) as avgrating 
MATCH ()-[r:RATED]->(m:MOVIE) 
WITH m.title as titlemovie, avgrating, avg(r.rating) as  movierating 
WHERE movierating < avgrating/2
RETURN titlemovie, avgrating, movierating 
ORDER BY movierating ASC
MATCH()-[r:RATED]->(m:MOVIE)
以平均值(r.额定值)作为平均值
匹配()-[r:RATED]->(m:MOVIE)
m.头衔为titlemovie,avgrating,avg(r.评级)为电影
其中,移动<平均光栅/2
返回标题移动、avgrating、movierating
移动ASC命令
但当我将它们合并在一起时,查询永远不会结束

MATCH ()-[r:RATED]->(m:MOVIE) 
WITH  avg(r.rating) as avgrating 
MATCH ()-[r:RATED]->(m:MOVIE) 
WITH m.title as titlemovie, avgrating, avg(r.rating) as  movierating 
WHERE movierating < avgrating/2
MATCH (m:MOVIE)-[r:HAS_TAG]->() 
WITH count(r) as tagnum, m.title as title_now, titlemovie, avgrating, movierating 
WITH avg(tagnum) as avgtagnum, titlemovie, avgrating, movierating 
MATCH (m:MOVIE)-[r:HAS_TAG]->() 
WITH count(r) as tagnum, m.title as title_now, avgtagnum, titlemovie, avgrating, movierating 
WHERE tagnum > avgtagnum*3
RETURN titlemovie, avgrating, movierating, avgtagnum, tagnum 
ORDER BY tagnum DESC,  movierating ASC
MATCH()-[r:RATED]->(m:MOVIE)
以平均值(r.额定值)作为平均值
匹配()-[r:RATED]->(m:MOVIE)
m.头衔为titlemovie,avgrating,avg(r.评级)为电影
其中,移动<平均光栅/2
匹配(m:电影)-[r:有标签]->()
计数(r)为tagnum,m.title为title_,titlemovie,avgrating,movierating
以avg(tagnum)作为avgtagnum、titlemovie、avgrating、movierating
匹配(m:电影)-[r:有标签]->()
计数(r)为tagnum,m.title为title_,现在为avgtagnum,titlemovie,avgrating,movierating
其中tagnum>avgtagnum*3
返回标题移动、avgrating、movierating、avgtagnum、tagnum
由tagnum DESC、movierating ASC订购
问题是我如何找到符合我2个要求的电影;更少的音符,更受欢迎

  • 首先,使用avg(评级)会给你平均评级,而不是电影的平均评级
  • 二,。
    MATCH(m:MOVIE)-[r:HAS_-TAG]->()
    将计数(r)作为tagnum。。。 将avg(tagnum)作为avgtagnum…
    由于模式匹配只考虑了那些有一些标记的电影(所以你会得到比实际更大的平均数),所以这段代码不会给出确切的平均标记数

  • 为什么要将
    与。。。m、 标题现在为标题,标题视频
    两个标题?最好的猜测是你们看错了电影
  • 如果必须纠正您的疑问,我会这样写:


    MATCH()-[r:RATED]->(m:MOVIE)
    以m、平均值(r评级)作为平均值
    以avg(avgra)作为avg光栅
    比赛(m:电影)
    以avg(尺寸((m)-[:HAS_TAG]-())作为avgtagnum,avgrating
    匹配(m:电影)-[r:有标签]->()
    计数(r)为tagnum,m.title为titlemovie,avgtagnum,avgrating,avg(r.rating)为movierating
    其中tagnum>avgtagnum*3和movierating

    MATCH ()-[r:RATED]->(m:MOVIE) 
    WITH  avg(r.rating) as avgrating 
    MATCH ()-[r:RATED]->(m:MOVIE) 
    WITH m.title as titlemovie, avgrating, avg(r.rating) as  movierating 
    WHERE movierating < avgrating/2
    MATCH (m:MOVIE)-[r:HAS_TAG]->() 
    WITH count(r) as tagnum, m.title as title_now, titlemovie, avgrating, movierating 
    WITH avg(tagnum) as avgtagnum, titlemovie, avgrating, movierating 
    MATCH (m:MOVIE)-[r:HAS_TAG]->() 
    WITH count(r) as tagnum, m.title as title_now, avgtagnum, titlemovie, avgrating, movierating 
    WHERE tagnum > avgtagnum*3
    RETURN titlemovie, avgrating, movierating, avgtagnum, tagnum 
    ORDER BY tagnum DESC,  movierating ASC
    
    MATCH ()-[r:RATED]->(m:MOVIE) 
    WITH  m, avg(r.rating) as avgra
    with avg(avgra) as avgrating
    MATCH (m:MOVIE) 
    WITH avg(size((m)-[:HAS_TAG]-())) as avgtagnum, avgrating
    MATCH (m:MOVIE)-[r:HAS_TAG]->() 
    WITH count(r) as tagnum, m.title as titlemovie, avgtagnum, avgrating, avg(r.rating) as movierating
    WHERE tagnum > avgtagnum*3 and movierating < avgrating/2
    RETURN titlemovie, avgrating, movierating, avgtagnum, tagnum 
    ORDER BY tagnum DESC,  movierating ASC