当列具有负值和正值时,WHERE查询中的MySql IF

时间:2018-05-04 04:48:51

标签: mysql

我正在尝试编写像

这样的查询
SELECT SUM(a.payment_value) AS paymentvalue 
FROM tableA a 
WHERE IF (a.column_3 <> 'UOB' AND a.column_3 <> 'Affin', 
  a.payment_value > 0, 
 {else a.payment_value can be positive and negative value}) 
GROUP BY a.column_3;

查询是

  1. a.column_3
  2. 汇总a.payment_value分组
  3. 条件1,if a.column_3 is not 'UOB' or 'AFFIN',选择并且仅汇总正值
  4. 条件2,if a.column_3 is UOB' or 'AFFIN',选择并汇总正负值
  5. 我尝试了以下内容(据说总计2行 - > 1000 +( - 5)= 995),但只返回-5作为付款值,而不是总和。

    SELECT SUM(a.payment_value) AS paymentvalue 
    FROM tableA a 
    WHERE IF (a.column_3 <> 'UOB' AND a.column_3 <> 'Affin', a.payment_value > 0, a.payment_value > 0 OR a.payment_value > 0) 
    GROUP BY a.column_3;
    

    如何在这些条件下在WHERE子句中编写IF?

2 个答案:

答案 0 :(得分:0)

这是一种接近它的方法(有多种方法可以实现)。在我下面的建议中,我为你描述的两个条件中的每一个创建标签,以及为了以防万一而捕获其他所有条件的第三个条件。

然后,我将其包装到子查询中并从子查询中总结payment_value,同时对条件进行分组以区分每个条件。

我希望它可以帮到你:

SELECT
    sub.Conditions
    ,SUM(sub.payment_value) paymentValue
FROM
    (
    SELECT
        *
        ,CASE
            WHEN a.column_3 NOT IN ('UOB','AFFIN') AND a.payment_value > 0 THEN 'Condition1'
            WHEN a.column_3 IN ('UOB','AFFIN') THEN 'Condition2'
            ELSE 'Condition3'
        END Conditions
    FROM TableA a
    ) sub
GROUP BY
    sub.Conditions;

答案 1 :(得分:0)

我的团队负责人解决了这个问题,在这里我想与所有人分享解决方案。代码是

SELECT SUM(a.payment_value) AS paymentvalue FROM tableA a WHERE IF (a.column_3 <> 'UOB' AND a.column_3 <> 'Affin', a.payment_value > 0, a.payment_value) GROUP BY a.column_3;
如果不满足条件,

将简单地获取a.payment_value列中的任何值(正数或负数)。