1
我试图执行以下的Cypher查询暗号 - 问题与在+总结+用
START b=node:customer_idx(ID = 'ABCD')
MATCH p = b-[r1:LIKES]->stuff, someone_else_too-[r2:LIKES]->stuff
with b,someone_else_too, count(*) as matchingstuffcount
where matchingstuffcount > 1
//with b, someone_else_too, matchingstuffcount, CASE WHEN ...that has r1, r2... END as SortIndex
return someone_else_too, SortIndex
order by SortIndex
上述查询工作正常,但此刻我去掉低“与”我收到以下错误
Unknown identifier `b`.
Unknown identifier `someone_else_too`.
Unknown identifier `matchingstuffcount`.
Unknown identifier `r1`.
Unknown identifier `r2`.
为了解决这个问题,我把r1和r2放在最上面, - "with b,someone_else_too, count(*) as matchingstuffcount".
到"with b, r1, r2, someone_else_too, count(*) as matchingstuffcount".
这样就混淆了我的count(*) > 1
条件,因为count(*)不能合适地聚合。
任何解决方法/建议过滤掉count(*)> 1,同时确保Case When也可以执行?
嗨,爱德华,在你的解决方案中,如果你想返回r(或r的一个属性),问题就来了。所以查询看起来像START n = node:node_auto_index(name ='Neo') MATCH n- [r:KNOWS | LOVES *] - > m WITH n,r,COUNT(r)AS cnt,m WHERE cnt> 1 WITH n,r,cnt,m,CASE WHEN m.name?='Cypher'THEN 1 ELSE 0 END AS isCypher RETURN n AS Neo,cnt,m,isCypher,r ORDER BY cnt。这将不返回行(或错误的计数)。在这里看到的模拟[链接](http://console.neo4j.org/r/i59lpv) – Anshul
但这是绝对有道理的,因为如果你在第一个'WITH'子句中加上'r',你就可以有效地将每个关系分别。这意味着所有的行都将失败'WHERE cnt> 1'测试。在你的例子中,如果你删除了'WHERE'子句,你会得到结果。 – Edward
所以简单说吧。我有一个关系属性Pct。我想按照desc排序。所以我使用Order By r.Pct。另外,我想删除计数小于2的行,因为那些结果偏斜。在你分享的例子中,我们可以做一个或另一个,但不能两个都完成 - 过滤和排序关系就是我想要做的。 – Anshul