Neo4j查询指定标签高互动博客时count聚合函数使用报错如何解决
报错原因
你收到的报错是因为Cypher语法规定,COUNT()这类聚合函数不能直接写在WHERE子句中做过滤,必须先通过WITH子句完成聚合计算、得到明确的聚合值之后,才能对聚合值设置过滤条件。
修正后的查询方案
你可以在一次遍历中同时完成两个指标的计算,不需要分开两次MATCH,执行效率更高也能避免语法错误:
MATCH (b:Blog)--(p:Post)-[:tagged]-(t:Tag {content:"dog"}) WITH b, // 统计该账号下带dog标签的帖子收到的点赞互动总量 COUNT{ (b)<-[:liked]-(p) } as interaction_count, // 统计该账号发布的带dog标签的帖子总数 COUNT(DISTINCT p) as post_count // 过滤发布带dog标签帖子数少于10的账号 WHERE post_count < 10 RETURN b, interaction_count ORDER BY interaction_count DESC LIMIT 10
如果你使用的Neo4j版本较低,不支持模式 comprehension 形式的COUNT,可以使用兼容写法:
MATCH (b:Blog)-[r:liked]-(p:Post)-[:tagged]-(t:Tag {content:"dog"}) WITH b, COUNT(r) as interaction_count, COUNT(DISTINCT p) as post_count WHERE post_count < 10 RETURN b, interaction_count ORDER BY interaction_count DESC LIMIT 10
内容的提问来源于stack exchange,提问作者Damian Grzanka
相关产品推荐
相关产品推荐

