MySQL WHERE子句中使用IF处理含正负值列的查询问题
解决方案
这里我们可以用CASE语句来灵活控制求和的范围(大部分SQL数据库都支持CASE,兼容性更好),直接满足你的分组求和需求:
SELECT a.column_3, SUM( CASE WHEN a.column_3 NOT IN ('UOB', 'Affin') THEN GREATEST(a.payment_value, 0) ELSE a.payment_value END ) AS paymentvalue FROM tableA a GROUP BY a.column_3;
逻辑说明
- 针对不同分组做差异化处理:
- 当
column_3不是'UOB'或'Affin'时,用GREATEST(a.payment_value, 0)只保留正值(负数会被替换为0,求和时不会拉低合计值) - 对于'UOB'和'Affin'分组,直接保留
payment_value的原始值,正负都参与求和
- 当
- 最后按
column_3分组计算合计,结果字段命名为paymentvalue
如果你习惯用IF语法(比如MySQL环境),也可以写成等价的版本:
SELECT a.column_3, SUM( IF(a.column_3 NOT IN ('UOB', 'Affin'), GREATEST(a.payment_value, 0), a.payment_value) ) AS paymentvalue FROM tableA a GROUP BY a.column_3;
两种写法逻辑完全一致,选你熟悉的语法即可。
内容的提问来源于stack exchange,提问作者lazyduckiy
相关产品推荐
相关产品推荐

