Try   HackMD

1393. Capital Gain/Loss

Fix Names in a Table

透過leetcode 1393Capital Gain/Loss來練習

使用table

(stock_name, operation_day) 是該表的主鍵。
操作列是一個 ENUM 類型 ('Sell', 'Buy')
該表的每一行表示具有 stock_name 的股票在當天 operation_day 以價格進行了操作。
保證股票的每個“賣出”操作在前一天都有相應的“買入”操作。還保證股票的每個“買入”操作在接下來的一天都有相應的“賣出”操作。

題目說明:

編寫 SQL 查詢以報告每隻股票的資本損益。

股票的資本收益/損失是買賣股票一次或多次后的總收益或損失。

按任意順序返回結果表。

查詢結果格式位於以下範例中。

解題:

以下為第一個例題

  1. 先判斷OPERATION = 'BUY' 即為 支出所以加上 -
  2. 再用一個 select 把全部PRICE sum起來
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
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