You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:53:47