如何合并两个MySQL SELECT查询结果,按GEAR维度输出总量和四月统计数据
你可以通过条件聚合的方式实现需求,仅需一次表扫描即可得到结果,执行效率更高,SQL写法如下:
SELECT GEAR, COUNT(GEAR) AS Total, SUM(CASE WHEN MONTH(fail_time) = 4 THEN 1 ELSE 0 END) AS April FROM new_failure WHERE STN_CODE = "BVH" GROUP BY GEAR;
逻辑说明:
- 原有全量统计逻辑不变,
COUNT(GEAR)直接返回对应设备的全部故障总数 - 4月故障统计通过条件判断实现:仅当故障时间属于4月时计数+1,其余情况+0,求和后得到对应设备4月的故障数
- 该写法会自动将4月无故障记录的设备的April字段赋值为0,无需额外判空处理
如果你更倾向于用两个查询结果拼接的方式实现,也可以使用左连接写法:
SELECT t1.GEAR, t1.Total, IFNULL(t2.April, 0) AS April FROM ( SELECT GEAR, COUNT(GEAR) AS Total FROM new_failure WHERE STN_CODE = "BVH" GROUP BY GEAR ) t1 LEFT JOIN ( SELECT GEAR, COUNT(GEAR) AS April FROM new_failure WHERE STN_CODE = "BVH" AND MONTH(fail_time) = 4 GROUP BY GEAR ) t2 ON t1.GEAR = t2.GEAR;
内容的提问来源于stack exchange,提问作者Himanshu rana
相关产品推荐
相关产品推荐

