sql - 使用 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
解决方案
您可以计算它的总和一个条件表达式:
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
推荐阅读
- python - 如何获取任何一个月的最后一周的日期
- python - google colab pro 可以连接超过 24 小时吗?
- python - Python“找不到模块”或“没有父级的相对路径”或“没有命名的模块
" 不一致的错误 - android - Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么
- xaml - 为什么我不能在 XAML 中对 StreamImageSource 进行数据绑定以及如何正确绑定图像?
- reactjs - 当值明显不为空时,反应值未定义
- fortran - 如何解决与在 Fortran 中覆盖文件相关的错误?
- visual-studio-code - 如何使用更漂亮的特定语言
- ruby - 如何在 ruby 中对哈希数组进行排序
- office-js - 漫游设置在 Outlook 应用程序中不起作用