如何用Neo4j Cypher单查询返回多组用户统计计数?
单个Cypher查询同时返回多组用户统计计数
当然可以通过单个Cypher查询实现需求,下面提供两种实用的实现方式:
方法一:使用COUNT()结合CASE表达式
直接在聚合阶段一次性计算所有统计指标,写法简洁直观:
MATCH (u:User) RETURN COUNT(u) AS total_users, COUNT(CASE WHEN u.active = true THEN 1 END) AS active_users, COUNT(CASE WHEN u.active = false THEN 1 END) AS inactive_users
原理:CASE语句仅在满足条件时返回1,否则返回NULL;而COUNT()函数会自动忽略NULL值,以此分别统计出活跃、非活跃用户数,COUNT(u)则直接得到用户总数。
方法二:先分组统计再汇总
先按active属性分组统计各状态的用户数,再汇总成目标指标,适合后续需要扩展更多用户状态的场景:
MATCH (u:User) WITH u.active AS is_active, COUNT(u) AS count WITH SUM(count) AS total_users, SUM(CASE WHEN is_active = true THEN count ELSE 0 END) AS active_users, SUM(CASE WHEN is_active = false THEN count ELSE 0 END) AS inactive_users RETURN total_users, active_users, inactive_users
原理:第一步按用户活跃状态分组计数,第二步通过SUM()结合CASE将分组结果整合为需要的三个统计值,扩展性更强。
补充说明
如果部分User节点不存在active属性,上述查询不会将其计入活跃或非活跃用户。若需要把无active属性的用户视为非活跃,可以调整非活跃用户的统计条件:
COUNT(CASE WHEN u.active <> true THEN 1 END) AS inactive_users
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

