【问题标题】:how to get difference of sums of 2 different type of transactions in mysql如何在mysql中获得2种不同类型事务总和的差异
【发布时间】:2016-03-03 05:46:39
【问题描述】:
table - id, user_id, amount, type int(1), timestamp.

类型 1- 借记 0- 积分

我想获取用户的当前余额,即所有贷方的总和 - 所有借方的总和

谁能帮我解决这个问题?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    如果贷方为正而借方为负,那么就这样做:

    SELECT SUM(amount), 0)
    FROM t
    WHERE user_id = 1;
    

    如果他们都是正面的,你可以这样做:

    SELECT SUM(CASE WHEN type = 2 THEN -amount ELSE amount END)
    FROM t
    WHERE user_id = 1
    

    (假设 type = 1 是贷方,type = 2 是借方。)

    如果您希望 所有 用户使用它,只需将 WHERE 子句更改为 GROUP BY user_id

    编辑:回答您关于没有给定用户的条目的问题:如果您要求的用户不在表(例如,作为左连接的一部分?),但如果你真的想要零,你可以说COALESCE(SUM(...), 0)

    【讨论】:

    • 感谢您的快速回复。如果没有任何特定用户的条目,它将返回 NULL。如果用户没有输入,如何使其返回 0.00?
    【解决方案2】:
    SELECT user_id, 
           SUM(CASE WHEN type = '0' THEN 1 ELSE 0 END) totalDebit,
           SUM(CASE WHEN type = '1' THEN 1 ELSE 0 END) totalCredit
      FROM table
     GROUP BY user_id
    

    【讨论】:

    • 我看起来这计算了用户有多少次贷记或借记,但我相信问题是询问如何计算当前余额。
    【解决方案3】:

    试试这个查询

    SELECT user_id, 
       SUM(CASE WHEN type = '1' THEN amount ELSE 0 END) totalDebit,
       SUM(CASE WHEN type = '0' THEN amount ELSE 0 END) totalCredit
    FROM table
    GROUP BY user_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 2012-04-30
      • 2019-12-19
      • 2014-11-04
      • 2023-03-13
      相关资源
      最近更新 更多