Neo4j如何统计指定标签节点各属性的非空非Null值数量?
统计指定节点标签下所有属性的非空非Null值出现次数
修改后的查询语句
要实现对Person标签下所有属性的非空非Null值计数,可使用以下Cypher查询:
MATCH (p:Person) UNWIND keys(p) AS key WITH key, p[key] AS value WHERE value IS NOT NULL AND value <> '' RETURN key, COUNT(value) AS non_empty_count ORDER BY key
逻辑说明
- 匹配节点:
MATCH (p:Person)获取所有标签为Person的节点。 - 展开属性键:
UNWIND keys(p) AS key将每个节点的属性键逐个展开,形成独立的键条目。 - 过滤有效属性值:通过
p[key]获取当前键对应的属性值,再用WHERE条件过滤掉NULL值和空字符串。 - 分组统计:按属性键
key分组,统计符合条件的属性值数量,最终返回每个属性的非空非Null计数。
扩展:包含无有效数据的属性(显示0)
如果需要返回所有存在的属性键,即使该属性没有符合条件的值也显示计数为0,可使用以下查询:
// 先收集所有Person节点的唯一属性键 MATCH (p:Person) UNWIND keys(p) AS key WITH COLLECT(DISTINCT key) AS all_keys // 统计每个属性的非空非Null次数 MATCH (p:Person) UNWIND keys(p) AS key WITH key, p[key] AS value WHERE value IS NOT NULL AND value <> '' WITH key, COUNT(value) AS non_empty_count // 关联所有属性键,补全无数据的属性计数为0 RIGHT JOIN all_keys ON key = all_keys RETURN all_keys AS key, COALESCE(non_empty_count, 0) AS non_empty_count ORDER BY key
内容的提问来源于stack exchange,提问作者Tony Riddle
相关产品推荐
相关产品推荐

