You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j数据库如何按多属性/标签统计节点并返回指定格式结果

Neo4j 多维度学校人员统计查询实现

Neo4j学校人员数据结构示意图
以下Cypher查询可直接返回要求结构的统计结果,单次查询完成所有维度聚合,无需应用层二次拼接。

查询语句

// 分标签统计各类人员基数
OPTIONAL MATCH (t:Teacher)
WITH count(t) AS teacherCount
OPTIONAL MATCH (s:Staff)
WITH teacherCount, count(s) AS staffCount
OPTIONAL MATCH (stu:Student)
WITH teacherCount, staffCount,
     count(stu) AS studentTotal,
     count(CASE WHEN stu.score > 9 THEN 1 END) AS studentOverNine,
     count(CASE WHEN stu.score > 8 AND stu.score <= 9 THEN 1 END) AS studentOverEight,
     count(CASE WHEN stu.score > 7 AND stu.score <= 8 THEN 1 END) AS studentOverSeven
// 独立子查询聚合在校人员明细,避免笛卡尔积导致统计错误
CALL {
    MATCH (p)
    WHERE p:Teacher OR p:Staff OR p:Student
    RETURN collect({
        name: p.name,
        details: properties(p)
    }) AS peopleList
}
// 组装为指定嵌套结构返回
RETURN {
    teachers: teacherCount,
    staff: staffCount,
    students: {
        total: studentTotal,
        overNine: studentOverNine,
        overEight: studentOverEight,
        `over seven`: studentOverSeven
    },
    peopleInSchool: peopleList
} AS result

调整说明

  • 分数段默认采用互斥区间逻辑统计:overNine统计9分以上学生、overEight统计8-9分(不含9)学生、over seven统计7-8分(不含8)学生,不会出现重复计数。如果需要累计统计(即8分以上人数包含9分以上人数),删除CASE语句中对应的分值上限判断条件即可。
  • 明细字段details默认通过properties(p)返回人员节点的全量属性,如果需要自定义返回字段,可以替换为手动属性映射,例如details: {jobTitle: p.jobTitle, entranceYear: p.entranceYear, score: p.score}。
  • 所有统计逻辑使用OPTIONAL MATCH实现,当某类人员、某分数段学生数量为0时,会正常返回数值0,不会因为匹配不到节点返回空结果。

内容的提问来源于stack exchange,提问作者jee_kuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:36:20