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
| symbol | totalshares |
|--------|-------------|
| aapl | 5 |
| gold | 17 |
在下面的 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
| symbol | totalshares |
|--------|-------------|
| aapl | 5 |
| gold | 17 |