SQL - 如何从一列中减去值

SQL - How to subtract values from one column

在下面的 table 中,我想减去每个符号的买入总股数与卖出总股数。

TABLE transactions
+--------+--------+--------------------+--------+---------+---------+---------------------+
| t_type | symbol |        name        | shares | t_price | t_value |       t_date        |
+--------+--------+--------------------+--------+---------+---------+---------------------+
| buy    | aapl   | Apple Inc          | 10     | 159.61  | 1596.1  | 2022-02-24 18:51:22 |
| buy    | gold   | Barrick Gold Corp. | 20     | 22.735  | 454.7   | 2022-02-24 18:51:44 |
| sell   | aapl   | Apple Inc          | 5      | 158.715 | 793.575 | 2022-02-24 19:04:51 |
| sell   | gold   | Barrick Gold Corp. | 2      | 22.54   | 45.08   | 2022-02-25 10:15:29 |
| sell   | gold   | Barrick Gold Corp. | 1      | 22.86   | 22.86   | 2022-02-25 10:16:04 |
+--------+--------+--------------------+--------+---------+---------+---------------------+

比如id我先做:

SELECT t_type, symbol, shares FROM transactions WHERE user_id = 14 AND t_type = "buy";
+--------+--------+--------+
| t_type | symbol | shares |
+--------+--------+--------+
| buy    | aapl   | 10     |
| buy    | gold   | 18     |
+--------+--------+--------+

然后

SELECT t_type, symbol, shares FROM transactions WHERE user_id = 14 AND t_type = "sell";
+--------+--------+--------+
| t_type | symbol | shares |
+--------+--------+--------+
| sell   | aapl   | 5      |
| sell   | gold   | 2      |
| sell   | gold   | 1      |
+--------+--------+--------+

有没有办法减去份额?

您可以尝试使用条件聚合函数,SUM & CASE WHEN 符合您的逻辑,buy 为正股,sell 为负股

SELECT  symbol,SUM(CASE WHEN t_type  = 'buy' THEN shares 
                               WHEN t_type  = 'sell' THEN - shares 
                               ELSE 0 END)
FROM transactions 
WHERE user_id = 14
GROUP BY  symbol

Results:

| symbol | totalshares |
|--------|-------------|
|   aapl |           5 |
|   gold |          17 |