如何通过JOIN关联查询计算SQL质量审核通过率并返回百分比结果
质量审核通过率SQL查询修正方案
问题原因
你现有的合并查询将分子、分母逻辑写反,实际执行的是「总审核实例数 ÷ 审核通过数 × 100」,和你需要的「审核通过数 ÷ 总审核实例数 ×100」逻辑相反,因此结果异常。
正确写法
写法1:修正子查询逻辑
直接调整分子分母的位置即可:
SELECT (SELECT COUNT(*) FROM EVENTS RIGHT JOIN EVENTATTRIBUTES ON EVENTS.EVENT_NUM = EVENTATTRIBUTES.EVENT_NUM WHERE EVENTS.EVENT_TYPE='QUALITY REVIEW' AND EVENTATTRIBUTES.ATTRIBUTE_NAME='QR PASS' AND EVENTATTRIBUTES.ATTRIBUTE_AS_CHAR='1') * 100.0 / (SELECT COUNT(*) FROM EVENTS RIGHT JOIN EVENTATTRIBUTES ON EVENTS.EVENT_NUM = EVENTATTRIBUTES.EVENT_NUM WHERE EVENTS.EVENT_TYPE='QUALITY REVIEW' AND EVENTATTRIBUTES.ATTRIBUTE_NAME='QR PASS') AS pass_rate;
写法2:条件聚合(更高效,仅扫描一次表)
用条件聚合统计通过数和总数,性能更优,也便于调试:
SELECT ROUND( SUM(CASE WHEN EVENTATTRIBUTES.ATTRIBUTE_AS_CHAR = '1' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS pass_rate FROM EVENTS RIGHT JOIN EVENTATTRIBUTES ON EVENTS.EVENT_NUM = EVENTATTRIBUTES.EVENT_NUM WHERE EVENTS.EVENT_TYPE='QUALITY REVIEW' AND EVENTATTRIBUTES.ATTRIBUTE_NAME='QR PASS';
上述写法中ROUND(xxx,1)会自动保留1位小数,符合你示例中62.1的输出要求。
内容的提问来源于stack exchange,提问作者Matt Goodrich
相关产品推荐
相关产品推荐

