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

如何在SonarQube中获取项目各文件的Bug数量?求SQL查询方案

获取SonarQube项目中每个文件的Bug数量

我之前在做SonarQube数据统计时也碰到过这个需求,一开始误以为要从projects_measures表入手,后来才搞清楚——这个表其实是用来存储项目/模块级别的聚合度量(比如整个项目的总Bug数),如果要拿到单个文件的Bug数量,得靠projects、files(或老版本的components)和issues这三个核心表的关联来实现。

核心关联逻辑

先理清楚关键表的作用和关联关系:

  • projects:存储项目的基础信息,id是项目的唯一主键
  • files(SonarQube 8.x+):存储项目下的所有文件,project_id关联projects.id,uuid是文件的唯一标识
  • components(SonarQube 7.x及以下):老版本中用来存储所有组件(包括文件、模块等),需要用qualifier = 'FIL'筛选出文件类型的记录
  • issues:存储所有代码问题(Bug、漏洞、代码异味等),component_uuid关联文件的uuid,type字段用来区分问题类型(BUG就是我们要统计的Bug)

适用不同版本的SQL语句

适用于SonarQube 8.x及以上版本

SELECT
    p.name AS project_name,
    f.file_path AS file_path,
    COUNT(i.id) AS bug_count
FROM
    projects p
JOIN
    files f ON p.id = f.project_id
LEFT JOIN
    issues i ON f.uuid = i.component_uuid AND i.type = 'BUG'
WHERE
    p.name = '你的目标项目名称' -- 替换为实际项目名,也可以用p.id指定项目ID
GROUP BY
    p.name, f.file_path
ORDER BY
    bug_count DESC;

适用于SonarQube 7.x及以下版本

老版本没有单独的files表,需要从components中筛选文件:

SELECT
    p.name AS project_name,
    c.path AS file_path,
    COUNT(i.id) AS bug_count
FROM
    projects p
JOIN
    components c ON p.id = c.project_id AND c.qualifier = 'FIL' -- 只保留文件类型的组件
LEFT JOIN
    issues i ON c.uuid = i.component_uuid AND i.type = 'BUG'
WHERE
    p.name = '你的目标项目名称'
GROUP BY
    p.name, c.path
ORDER BY
    bug_count DESC;

额外的过滤技巧

如果需要更精准的统计,可以添加额外条件:

  • 只统计未修复的Bug:在LEFT JOIN或WHERE中加入i.status = 'OPEN'(具体状态值可根据你的SonarQube版本调整)
  • 按Bug严重程度筛选:加入i.severity = 'CRITICAL'或i.severity = 'MAJOR'等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:08