如何将两条MySQL查询合并为一条,同时统计passed与failed数量?
可行,用条件聚合就能实现
你可以利用MySQL的条件聚合功能,把两个查询合并成一条,直接得到你想要的格式。核心思路是用SUM结合条件判断,分别统计passed和failed的数量。
方法一:用IF函数实现(MySQL专属简洁写法)
SELECT MAX(build) AS Maxbuild, SUM(IF(status = 'passed', 1, 0)) AS passed, SUM(IF(status = 'failed', 1, 0)) AS failed FROM bioraddash.fullsuite WHERE build = 2980;
方法二:用CASE WHEN实现(标准SQL写法,兼容性更强)
SELECT MAX(build) AS Maxbuild, SUM(CASE WHEN status = 'passed' THEN 1 ELSE 0 END) AS passed, SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS failed FROM bioraddash.fullsuite WHERE build = 2980;
原理说明
- 因为
WHERE已经限定了build = 2980,所以MAX(build)的结果必然是2980,和你原来两个查询里的MAX(build)效果一致。 SUM(IF(status = 'passed', 1, 0))会遍历每一行:如果status是passed就加1,否则加0,最终总和就是passed的数量;failed的统计逻辑同理。- 如果某类状态没有数据(比如例子里的
failed为0),会自动返回0,完全符合你想要的输出格式。
内容的提问来源于stack exchange,提问作者PChao
相关产品推荐
相关产品推荐

