【问题标题】:How to SQL SUM with condition如何使用条件进行 SQL SUM
【发布时间】:2024-01-21 06:15:01
【问题描述】:

我有一个交易表,想根据交易类型进行计算。怎么做?

表:

id | amount | type
--------------------
01 | 230    | IncomingTransfer
02 | 100    | OutcomingTransfer
03 | 20     | IncomingTransfer

逻辑:

SELECT SUM(amount)
IF IncomingTransfer
    + 230
    + 20
ELSE IF OutcomingTransfer
    - 100

Total amount: +150

【问题讨论】:

    标签: sql sum


    【解决方案1】:

    正如我的 sqlfiddle 所示:

    select
    sum(CASE WHEN type = 'IncomingTransfer' THEN amount ELSE -amount END) as totalsum
    from t;
    

    【讨论】:

    • 太棒了...没想到你能做到。
    • 是的,非常简单实用..实际上我认为它是在 SQL-92 标准中引入的。
    【解决方案2】:
    SELECT SUM(amount) FROM (
       SELECT CASE WHEN type='IncomingTransfer'
          THEN +amount
          ELSE -amount
          END as amount
       FROM MyTable
    ) as data
    

    【讨论】:

      【解决方案3】:

      我会使用:

          SELECT Amount = SUM(CASE WHEN Type = 'OutcomingTransfer' then (Amount*-1) 
                          ELSE Amount END)
          FROM <Table>
          GROUP BY <Grouping Field>
      

      【讨论】:

      • 不需要 GROUP BY - 在这种情况下使用它只会破坏事情
      • 你是对的。虽然我不确定在这个特定问题(StoreId、Date 等)中是否有其他字段可以分组,或者是否需要总和 - 所以为了彻底,我包括了 Group By。
      最近更新 更多