Lim Seunghyun Space

[LeetCode] Capital Gain/Loss 본문

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

'SQL > SQL 문제' 카테고리의 다른 글

[LeetCode] Market Analysis I  (0) 2023.03.18
[Leetcode] Exchange Seats  (0) 2023.03.18
[Leetcode] 197. Rising Temperature  (0) 2022.04.18
[Leetcode] 196. Delete Duplicate Emails  (0) 2022.04.18
[Leetcode] 184. Department Highest Salary  (0) 2022.03.25