SQL中为多个CitrixID计算独立百分比(修复错误查询)
解决CitrixID独立计算百分比的SQL问题
我来帮你搞定这个百分比计算的问题~咱们先分析下原查询的问题所在:
你原来的SQL里,百分比计算的分母用了一个子查询(SELECT SUM(AttemptGreen) + SUM(Attempt) FROM tblTrackQuestErrors WHERE Wave='Wave 86' and Document_Number='0123123123116'),这个子查询取的是整个Wave 86和文档0123123123116的总正确+错误数,所以不管哪个CitrixID,计算出来的百分比都是一样的,完全不符合“每个CitrixID独立计算百分比”的需求。
修正后的SQL查询
正确的做法是,每个CitrixID的百分比应该用自己的Correct数除以自己的Correct+Incorrect总数,同时为了避免出现除以0的报错,我们可以用NULLIF来处理除数为0的情况:
SELECT Citrix_ID, Wave, Document_Number, SUM(Attempt) as Incorrect, SUM(AttemptGreen) as Correct, CONCAT( ROUND((SUM(AttemptGreen) * 100.0) / NULLIF(SUM(AttemptGreen) + SUM(Attempt), 0), 2), '%' ) AS Percentage FROM tblTrackQuestErrors WHERE Wave='Wave 86' and Document_Number='0123123123116' GROUP BY Citrix_ID, Wave, Document_Number;
关键修改点说明
- 分母从全局子查询改成了当前分组的
SUM(AttemptGreen) + SUM(Attempt),这样每个CitrixID都会用自己的总尝试数来计算百分比 - 加入
NULLIF(..., 0):如果某个CitrixID的Correct+Incorrect总数为0,会返回NULL而不是报错,你也可以根据需求改成0%(把NULLIF替换成COALESCE(SUM(AttemptGreen) + SUM(Attempt), 0)即可) - 用
ROUND(..., 2)来控制百分比的小数位数,让结果更美观(你可以调整数字来改变小数位数)
这样修改后,每个CitrixID都会得到属于自己的独立百分比啦~
内容的提问来源于stack exchange,提问作者Sudhakar Chitlam
相关产品推荐
相关产品推荐

