如何使用MySQL编写单条SQL计算论文独有引用指标
问题背景
现有MySQL表PaperReferences存储论文引用关系,字段定义如下:
PaperID:引用方论文IDReferencedPaperID:被引用论文ID
需要为每篇论文计算指标:引用该论文且未引用该论文任何参考文献的施引论文总数。
以你给出的示例数据为例,论文1的指标值为2:它的施引论文共3篇(5、6、7),其中论文5同时引用了论文1的参考文献4,属于无效施引不计入统计,仅6、7符合要求。
实现思路
通过多层关联查询过滤有效施引论文,核心逻辑如下:
- 提取所有被引用的目标论文,以及对应的施引论文集合
- 关联查询拿到每篇目标论文的所有参考文献集合
- 排除施引论文中同时引用了上述参考文献的无效记录
- 按目标论文分组统计剩余有效施引的数量
最终SQL查询语句
SELECT target_paper.ReferencedPaperID AS PaperID, COUNT(DISTINCT target_paper.PaperID) AS indicator_value FROM PaperReferences AS target_paper LEFT JOIN PaperReferences AS target_ref ON target_paper.ReferencedPaperID = target_ref.PaperID LEFT JOIN PaperReferences AS invalid_citer ON target_paper.PaperID = invalid_citer.PaperID AND target_ref.ReferencedPaperID = invalid_citer.ReferencedPaperID WHERE invalid_citer.PaperID IS NULL GROUP BY target_paper.ReferencedPaperID;
示例验证&性能优化
- 你提供的示例数据执行上述SQL后,PaperID=1对应的
indicator_value返回2,和预期结果完全匹配 - 数据量较大时,可分别为
PaperID、ReferencedPaperID字段建立索引,查询效率会有大幅提升
内容的提问来源于stack exchange,提问作者Tom Leung
相关产品推荐
相关产品推荐

