【发布时间】:2021-11-09 21:56:50
【问题描述】:
我有一个包含列(TRANSACTION_ID、STOCK_NAME、STOCK_ID、VALUE、TYPE)的 SQL 表。该表将不同股票的投资表示为交易。我需要获取 SQL 查询来查找每只股票的总盈亏。
SQL 表
1|REL|2624|6653|sell
2|INFY|7660|3064|buy
3|INFY|4361|3117|buy
4|ITC|7292|6865|buy
5|INFY|2187|2618|buy
6|ITC|7292|7313|sell
7|INFY|3478|3196|sell
8|INFY|3472|3105|sell
9|REL|4472|7398|sell
10|INFY|7660|3351|sell
11|REL|4472|7350|buy
12|REL|5833|8240|buy
13|REL|5833|7937|sell
14|INFY|2187|2487|sell
15|REL|7198|7998|sell
16|INFY|3478|2944|buy
17|REL|2624|6985|buy
18|REL|7198|7645|buy
19|INFY|3472|3046|buy
20|INFY|4361|3384|sell
STOCK_ID 代表该股票的 ID,TYPE 代表交易是买入还是卖出。对于每个 STOCK_ID,将恰好有 1 笔买入交易和 1 笔卖出交易。我需要找到每个股票的盈亏如下
结果
ITC|448
INFY| 734
REL| -234
我有逻辑和公式,但我不知道如何将其转换为 SQL 查询。
我的逻辑 对于每个 STOCK_NAME,找到 STOCK_ID 的总和(利润/损失)为 (TYPE='sell') - (TYPE='buy')。
例如
4|ITC|7292|6865|buy
6|ITC|7292|7313|sell
ITC 的利润/损失 = 7313-6865 = 448
这是用于复制数据的 SQL 查询
BEGIN TRANSACTION;
/* Create a table called NAMES */
CREATE TABLE stocks(id integer PRIMARY KEY, symbol text, stock_id integer, value integer, typ text);
/* Create few records in this table */
INSERT INTO stocks VALUES(1,'REL', 2624, 6653, 'sell');
INSERT INTO stocks VALUES(2,'INFY', 7660, 3064, 'buy');
INSERT INTO stocks VALUES(3,'INFY', 4361, 3117, 'buy');
INSERT INTO stocks VALUES(4,'ITC', 7292, 6865, 'buy');
INSERT INTO stocks VALUES(5,'INFY', 2187, 2618, 'buy');
INSERT INTO stocks VALUES(6, 'ITC', 7292, 7313, 'sell');
INSERT INTO stocks VALUES(7, 'INFY', 3478, 3196, 'sell');
INSERT INTO stocks VALUES(8, 'INFY', 3472, 3105, 'sell');
INSERT INTO stocks VALUES(9, 'REL', 4472, 7398, 'sell');
INSERT INTO stocks VALUES(10, 'INFY', 7660, 3351, 'sell');
INSERT INTO stocks VALUES(11, 'REL', 4472, 7350, 'buy');
INSERT INTO stocks VALUES(12, 'REL', 5833, 8240, 'buy');
INSERT INTO stocks VALUES(13, 'REL', 5833, 7937, 'sell');
INSERT INTO stocks VALUES(14, 'INFY', 2187, 2487, 'sell');
INSERT INTO stocks VALUES(15, 'REL', 7198, 7998, 'sell');
INSERT INTO stocks VALUES(16, 'INFY', 3478, 2944, 'buy');
INSERT INTO stocks VALUES(17, 'REL', 2624, 6985, 'buy');
INSERT INTO stocks VALUES(18, 'REL', 7198, 7645, 'buy');
INSERT INTO stocks VALUES(19, 'INFY', 3472, 3046, 'buy');
INSERT INTO stocks VALUES(20, 'INFY', 4361, 3384, 'sell');
COMMIT;
/* Display all the records from the table */
【问题讨论】:
标签: sql