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

如何编写按部门统计passed状态占比的SQL查询语句

解决方案

你可以通过按部门分组+条件聚合的方式,一次性统计所有部门的passed占比,同时生成你需要的格式化文本结果。以下是两种可行的SQL写法:

方法1:条件聚合(推荐,更简洁)

SELECT
  department,
  -- 生成类似 "Finance: passed 66.67%" 的格式化文本
  CONCAT(department, ': passed ', ROUND(SUM(CASE WHEN status = 'passed' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2), '%') AS status_summary,
  -- 单独输出百分比数值(方便Grafana做可视化,比如条形图)
  ROUND(SUM(CASE WHEN status = 'passed' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS passed_percent
FROM your_table_name
GROUP BY department
ORDER BY department;

逻辑说明:

  • SUM(CASE WHEN status = 'passed' THEN 1 ELSE 0 END):统计每个部门中status为passed的人数
  • COUNT(*):统计每个部门的总人数
  • ROUND(..., 2):控制百分比的小数位数(这里保留2位,可按需调整)
  • GROUP BY department:确保按部门分组计算,一次性输出所有部门的结果

方法2:基于窗口函数的写法(和你原有查询逻辑衔接)

如果你想沿用窗口函数的思路,可以用子查询先计算各部门的状态明细和总人数,再外层汇总:

SELECT
  DISTINCT department,
  CONCAT(department, ': passed ', ROUND(MAX(CASE WHEN status = 'passed' THEN cnt * 100.0 / total END), 2), '%') AS status_summary,
  ROUND(MAX(CASE WHEN status = 'passed' THEN cnt * 100.0 / total END), 2) AS passed_percent
FROM (
  SELECT
    department,
    status,
    COUNT(*) AS cnt,
    -- 窗口函数计算当前部门的总人数
    SUM(COUNT(*)) OVER (PARTITION BY department) AS total
  FROM your_table_name
  GROUP BY department, status
) t
GROUP BY department
ORDER BY department;

适配Grafana的建议:

  • 如果用表格面板展示:department和status_summary列可以直接显示文本结果
  • 如果做可视化(比如条形图):用department作为X轴,passed_percent作为Y轴,能直观对比各部门的通过率

注意:请将上述SQL中的your_table_name替换成你实际的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:29