--- tags: sql, LeetCode --- # 1393. Capital Gain/Loss `Fix Names in a Table` 透過`leetcode 1393`[Capital Gain/Loss](https://leetcode.com/problems/capital-gainloss/)來練習 #### 使用table  (stock_name, operation_day) 是該表的主鍵。 操作列是一個 ENUM 類型 ('Sell', 'Buy') 該表的每一行表示具有 stock_name 的股票在當天 operation_day 以價格進行了操作。 保證股票的每個“賣出”操作在前一天都有相應的“買入”操作。還保證股票的每個“買入”操作在接下來的一天都有相應的“賣出”操作。 ## 題目說明: 編寫 SQL 查詢以報告每隻股票的資本損益。 股票的資本收益/損失是買賣股票一次或多次后的總收益或損失。 按任意順序返回結果表。 查詢結果格式位於以下範例中。  ## 解題: 以下為第一個例題 1. 先判斷`OPERATION = 'BUY'` 即為 支出所以加上 `-` 號 2. 再用一個 `select` 把全部`PRICE sum`起來 ```sql= SELECT A.STOCK_NAME,SUM(A.C1) AS CAPITAL_GAIN_LOSS FROM ( SELECT STOCK_NAME,CASE WHEN OPERATION = 'BUY' THEN -(PRICE) ELSE PRICE END C1 FROM Stocks ) A GROUP BY A.STOCK_NAME ``` 以下為第二個例題 1. 將 `OPERATION = 'SELL'` 與 `OPERATION = 'BUY'` 分別 SUM 在JOIN起來 2. 再select後將 `S.AMT` - `B.AMT` ```sql= SELECT S.STOCK_NAME, (S.AMT-B.AMT) AS CAPITAL_GAIN_LOSS FROM ( SELECT STOCK_NAME,SUM(PRICE) AS AMT FROM TABLE_2 WHERE OPERATION = 'SELL' GROUP BY STOCK_NAME ) S INNER JOIN ( SELECT STOCK_NAME,SUM(PRICE) AS AMT FROM TABLE_2 WHERE OPERATION = 'BUY' GROUP BY STOCK_NAME ) B ON S.STOCK_NAME = B.STOCK_NAME ``` By. @UEW2WaUHTqSmPOSfnfXrNw
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up