一个查询中一个 table 中两个行的 SUM 之间的减法

SUBTRACTION between two SUM of rows in one table in one query

我需要在一个 table 结果中显示所有金额的总和 WHERE description= Add Value; SUM 所有金额 WHERE description= Game Credit Used; SUM 之间的减法增加值 - 使用的游戏积分。 = 所有这些操作仅在一个 table FROM member_transactions WHERE member = '32-185149' 中进行;

我尝试编写此查询:(SQL 不起作用)

测试

SELECT member, description, SUM(amount)  
  FROM member_transactions  
 WHERE member = '32-185149' AND description = 'Add Value'  
UNION  
SELECT member, description,SUM(amount) AS GameCreditUsed  
  FROM member_transactions  
 WHERE member = '32-185149' AND description = 'Game Credit Used';  

需要加入SUBTRACTION

SELECT ((SELECT SUM(amount) FROM member_transactions WHERE member = '32-185149' AND description = 'Add Value')  
      - (SELECT SUM(amount) FROM member_transactions WHERE member = '32-185149' AND description = 'Game Credit Used')) 
    AS Balance;

我需要这样看 table:

member         description       Result  
32-185149      Add Value         240  
32-185149      Game Credit Used   40  
                                 200  

我需要一个查询来完成所有操作。谢谢!

使用条件聚合:

SELECT member, description,
       SUM(CASE WHEN description = 'Add Value' THEN amount ELSE 0 END) as add_value,
       SUM(CASE WHEN description = 'Game Credit Used' THEN amount ELSE 0 END) as game_credit_used,
FROM member_transactions
WHERE member = '32-185149' ;

您可以只减去这些值,而不是将它们放在单独的列中,因为您想要差值。

SELECT member, description, SUM(amount)  
  FROM member_transactions  
 WHERE member = '32-185149' AND description IN ('Add Value', 'Game Credit Used')  
 GROUP BY member, description

最后的总数应该在应用程序上但是如果你真的想要它需要做 UNION

SELECT member, description, SUM(amount)  
  FROM member_transactions  
 WHERE member = '32-185149' AND description IN ('Add Value', 'Game Credit Used')  
 GROUP BY member, description
UNION 
SELECT '' as member, 
       'total' as description, 
       SUM(CASE WHEN description = 'Add Value' THEN amount 
                WHEN description = 'Game Credit Used' THEN -amount 
                ELSE 0 
           END
          )  as total
  FROM member_transactions  
 WHERE member = '32-185149' 
 GROUP BY member