SQL/SQL 문제
[LeetCode] Capital Gain/Loss
Lim Seung Hyun
2023. 3. 30. 08:54
문제 출처
Capital Gain/Loss - LeetCode
Can you solve this real interview question? Capital Gain/Loss - Table: Stocks +---------------+---------+ | Column Name | Type | +---------------+---------+ | stock_name | varchar | | operation | enum | | operation_day | int | | price | int | +------------
leetcode.com
문제 해설
- 각 stock_name별 Gain 혹은 Loss의 총합을 구해 그 차이를 계산
- Gain 총합은 operation이 Sell의 합이고 반대로 Loss 총합은 operation이 Buy의 합이다.
- 문제에서는 operation_date가 있지만, Sell이 있기 전에는 Buy가 반드시 존재하고 Buy 이후에는 Sell이 보장되는 조건이 있기 때문에 operation_date는 관계없이 문제를 해결할 수 있다.
나의 풀이 (MySQL)
# Join
SELECT buy.stock_name, (sell_total - buy_total) AS capital_gain_loss
FROM
(SELECT stock_name, SUM(price) AS buy_total
FROM Stocks
WHERE operation = "Buy"
GROUP BY stock_name) AS buy
JOIN
(SELECT stock_name, SUM(price) AS sell_total
FROM Stocks
WHERE operation = "Sell"
GROUP BY stock_name) AS sell
ON buy.stock_name = sell.stock_name;
# CASE-WHEN
SELECT
stock_name,
SUM(
CASE
WHEN operation = "Buy" THEN -price
ELSE price
END
) AS capital_gain_loss
FROM Stocks
GROUP BY stock_name;
- 두 방법으로 풀이했으며 첫 번째는 각 Stock의 Operation별 총합을 계산하여 JOIN을 통해 문제를 해결하였고 두 번째는 CASE WHEN을 이용해 총합을 계산하였다.
728x90