按类型加减

add and subtract by type

我有一个 SQLite table payments:

+------+--------+-------+
| user | amount | type  |
+------+--------+-------+
| AAA  |  100   | plus  |
| AAA  |  200   | plus  |
| AAA  |  50    | minus |
| BBB  |  100   | plus  |
| BBB  |  20    | minus |
| BBB  |  5     | minus |
| CCC  |  200   | plus  |
| CCC  |  300   | plus  |
| CCC  |  25    | minus |

我需要为每个用户计算 'plus' 类型的总和,并从中减去 'minus' 类型的总和。

结果 table 应如下所示:

+------+--------+
| user | total  | 
+------+--------+
| AAA  |  250   | 
| BBB  |  75    | 
| CCC  |  475   | 

我认为我的查询很糟糕,我需要帮助来改进它:

select user,
(select sum(amount) from payments as TABLE1 WHERE TABLE1.type = 'plus' AND
 TABLE1.user= TABLE3.user) -
 (select sum(amount) from payments as TABLE2 WHERE TABLE2.type = 'minus' AND
TABLE2.user= TABLE3.user) as total
from payments as TABLE3
group by client
order by id asc

使用 CASE expression 可以更轻松地处理类型。然后您可以将聚合合并到外部查询中:

SELECT user,
       SUM(CASE type
           WHEN 'plus'  THEN amount
           WHEN 'minus' THEN -amount
           END) AS total
FROM payments
GROUP BY client
ORDER BY id;