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

MySQL求助:计算各id的通过率(现有查询结果错误)

解决MySQL计算每个id通过率的问题

我来帮你修正这个查询!你的原语句之所以返回错误结果,核心问题是逻辑完全搞反了:

  • 子查询(SELECT COUNT(Result) FROM aa WHERE Result = 'Pass')统计的是整个表中所有Pass的记录数,而不是当前id对应的Pass数量
  • 你把全局的Pass总数作为分母,但正确的分母应该是每个id自己的总记录数

正确的查询写法(两种可选)

方法一:用CASE表达式精准统计Pass数量

SELECT 
    id,
    ROUND(COUNT(CASE WHEN Result = 'Pass' THEN 1 END) * 100.0 / COUNT(*), 2) AS Percent
FROM aa
GROUP BY id;
  • COUNT(CASE WHEN Result = 'Pass' THEN 1 END):只统计当前id下Result为Pass的记录(不符合条件的会被视为NULL,COUNT不会统计NULL)
  • COUNT(*):统计当前id的总记录数
  • 乘以100.0是为了避免MySQL的整数除法陷阱(如果用纯整数运算,结果会被强制取整)
  • ROUND(..., 2)用来保留两位小数,你可以根据需求调整位数

方法二:用SUM+IF简化统计逻辑

SELECT 
    id,
    ROUND(SUM(IF(Result = 'Pass', 1, 0)) * 100.0 / COUNT(*), 2) AS Percent
FROM aa
GROUP BY id;
  • SUM(IF(Result = 'Pass', 1, 0)):把Pass记录计为1,Fail计为0,求和后直接得到当前id的Pass总数
  • 其余逻辑和方法一完全一致

验证示例

就拿你说的id=2的情况:2条Pass、2条Fail,用上面的查询会计算2*100.0/4=50.00,正好得到正确的50%通过率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:18:42