Cypher查询如何先对分子去重再统计每年新增分子数量
Cypher 每年新增分子统计解决方案
问题根源
你原查询的统计逻辑是按年份分组,统计该年份关联的所有分子总数,天然会重复计入早年已出现过的分子,和DISTINCT、ORDER BY的执行顺序无关,核心是没有限定只统计每个分子首次出现的年份。
可用查询语句
MATCH (p:Publication)-->(m:Molecule) // 提取每个分子首次出现在出版物中的年份 WITH m, min(datetime(p.releasedDate).year) AS first_release_year // 按首次出现年份分组统计新增分子数 RETURN first_release_year AS release_year, count(m) AS new_molecule_count ORDER BY release_year
逻辑说明
- 先用
min()聚合函数,对每个分子m取所有关联出版物的最小发布年份,也就是该分子第一次被公开提及的年份,每个分子仅会对应一个唯一的首次出现年份,从根源避免重复统计 - 再按首次出现年份分组计数,得到的结果就是每年的新增分子数量
- 如果需要展示没有新增分子的年份,可以额外构造年份序列后关联当前统计结果即可
内容的提问来源于stack exchange,提问作者Veer171
相关产品推荐
相关产品推荐

