如何在MySQL中计算重复数据的各状态占比百分比?
计算MySQL表中各Job的状态占比百分比
假设你的表名为job_status,可以用以下SQL查询实现需求:
SELECT job, ROUND( (SUM(CASE WHEN `final status` = 'Success' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2 ) AS `Success %`, ROUND( (SUM(CASE WHEN `final status` = 'Failed' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2 ) AS `Failed %`, ROUND( (SUM(CASE WHEN `final status` = 'Unknown' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2 ) AS `Unknown %` FROM job_status GROUP BY job;
语句说明:
COUNT(*):统计每个job对应的总行数(包含重复数据),作为占比计算的分母。SUM(CASE ...):通过条件判断统计对应状态的行数,作为占比计算的分子。ROUND(..., 2):将计算结果保留两位小数,保证百分比格式统一。GROUP BY job:按job分组,实现每个job独立计算状态占比。
示例输出:
| job | Success % | Failed % | Unknown % |
|---|---|---|---|
| Job A | 33.33 | 33.33 | 33.33 |
| Job B | 50.00 | 25.00 | 25.00 |
如果某个job无对应状态(比如没有Failed记录),上述语句会返回0.00,符合预期。
内容的提问来源于stack exchange,提问作者Sai Sasidhar
相关产品推荐
相关产品推荐

