基于条件的SQL金额计算:总金额扣除指定Code的金额
计算总金额扣除指定Code记录后的金额
数据表结构与数据
| Ticket | Amount | Code |
|---|---|---|
| 11 | 5.00 | |
| 12 | 3.00 | X |
| 13 | 10.00 | |
| 14 | 2.00 | X |
用户现有SQL
SELECT SUM(AMOUNT) FROM Table MINUS SELECT SUM(Amount) FROM Table WHERE Code = 'X'
优化方案与说明
你当前用MINUS的写法虽然可能得到正确结果,但MINUS是集合差集操作,这里两个查询都返回单个数值,属于过度使用,而且需要扫描两次表,效率偏低。
更简洁高效的是单表扫描完成计算,两种推荐写法:
写法1:直接筛选符合条件的金额求和
SELECT SUM(CASE WHEN Code != 'X' OR Code IS NULL THEN Amount ELSE 0 END) AS Total_After_Deduction FROM YourTable;
写法2:总金额减去目标Code的金额总和
SELECT SUM(Amount) - COALESCE(SUM(CASE WHEN Code = 'X' THEN Amount ELSE 0 END), 0) AS Total_After_Deduction FROM YourTable;
两种写法都能直接得到预期结果15,且仅需一次表扫描。另外注意:Table是SQL关键字,建议替换为实际表名(比如示例中的YourTable),避免语法错误。
内容的提问来源于stack exchange,提问作者VegasProgrammer
相关产品推荐
相关产品推荐

