如何合并两个检查相同标志列但值不同的SQL求和查询?
合并相同标志列不同取值的统计查询
嘿,这事儿处理起来超简单!你可以用条件聚合(在聚合函数里嵌入判断逻辑)把两条查询合并成一条,一次就能拿到两个统计结果,效率还更高。
最终合并后的SQL语句
SELECT SUM(CASE WHEN delivery.delivery_completed = '1' THEN stock_deliveries.stockValue ELSE 0 END) AS stockValues1, SUM(CASE WHEN delivery.delivery_completed = '0' THEN stock_deliveries.stockValue ELSE 0 END) AS stockValues2 FROM `stock_deliveries` LEFT JOIN `delivery` ON `delivery`.`pk_deliveryId` = `stock_deliveries`.`fk_deliveryId` WHERE `stock_deliveries`.`fk_stockID` = '189'
代码逻辑解释
- 核心是用
CASE WHEN给每个统计分支加判断:当delivery_completed匹配目标值时,取对应的stockValue参与求和,否则取0(不会影响总和结果)。 - 两个
SUM()分别对应你原来两条查询的统计逻辑,最终结果会在同一行的两个字段里返回,方便后续直接使用。 - 因为两条查询的过滤条件除了
delivery_completed的取值,其余完全一致,所以把公共条件统一放到外层WHERE即可,不用重复写两次。
如果你的第二条查询里delivery_completed是其他取值(比如不是0),只要把第二个CASE WHEN里的判断值改成你需要的就行,扩展性很强。
内容的提问来源于stack exchange,提问作者Manohar singh
相关产品推荐
相关产品推荐

