首页 > 解决方案 > 使用 LEFT Join 的 SQL 两个不同的聚合函数

问题描述

如何使用左连接返回两个具有不同条件的聚合函数?

我已经有了这个:

SELECT VehicleType.vehicleTypeName, COUNT(*) as SALE
FROM Transactions
LEFT JOIN VehicleType
ON Transactions.VehicleTypeID = VehicleType.vehicleTypeID
WHERE Transactions.isRefund = 0
GROUP BY VehicleType.vehicleTypeName

这将返回总车辆数

Name      | Sale
---------------
vehicle1  | 10
vehicle2  | 15

如果可能,我想知道如何获得每辆车的净数量(作为销售的车辆数量减去作为退款的车辆数量)

Name      | NetCount
---------------
vehicle1  | 8
vehicle2  | 10

如果不是这样的。

Name      | Sale | Refund
-------------------------
vehicle1  | 10   | 2
vehicle2  | 15   | 5

标签: sqlsql-server

解决方案


您可以计算它的总和一个条件表达式:

SELECT VehicleType.vehicleTypeName, 
       sum(case when Transactions.isRefund = 0 then 1 else 0 end) as Sale,
       sum(case when Transactions.isRefund = 1 then 1 else 0 end) as Refund
FROM Transactions
     LEFT JOIN VehicleType ON Transactions.VehicleTypeID = VehicleType.vehicleTypeID
GROUP BY VehicleType.vehicleTypeName

你的第一个结果是:

SELECT VehicleType.vehicleTypeName, 
       sum(case when Transactions.isRefund = 0 then 1 else -1 end) as NetCount
FROM Transactions
     LEFT JOIN VehicleType ON Transactions.VehicleTypeID = VehicleType.vehicleTypeID
GROUP BY VehicleType.vehicleTypeName

推荐阅读