본문 바로가기

[LeetCode] 1393. Capital Gain/Loss

by qwee0328 2025. 4. 17.

📝 1393. Capital Gain/Loss

🔹 자본 이득/손실

각 주식의 자본 이득/손실을 보고하는 솔루션을 작성하세요.
주식의 자본 이득/손실은 주식을 한 번 이상 매매한 후의 총 이익 또는 손실입니다.
어떤 순서로든 결과 테이블을 반환합니다.

 

 

 

📝 문제 설명

  • Stocks 테이블에는 주식을 사고판 기록이 저장되어 있습니다.
  • 각 행은 주식 이름(stock_name), 거래 유형(operation), 거래 가격(price)을 포함합니다.
  • Buy는 지출이므로 음수, Sell은 수익이므로 양수로 계산해야 합니다.
  • 같은 주식을 여러 번 사고팔 수 있으며, 총 수익(또는 손실)을 계산해야 합니다.
  • 결과에는 각 주식 이름과 자본 이득/손실을 나타내는 열이 포함되어야 합니다.

 

 

📊 테이블 구조

Stocks 테이블

Column Name Type
stock_name varchar
operation enum
operation_day int
price int
  • operation 컬럼의ENUM은 ('Sell', 'Buy') 입니다.

 

 

💡 SQL 문제 해결 방법

  1. CASE WHEN 문을 사용하여 거래 유형에 따라 값을 다르게 처리
    • Sell → 그대로 더함 (수익)
    • Buy → 음수로 변환하여 더함 (비용)
  2. SUM() 함수로 각 주식별 자본 이득/손실 계산
  3. GROUP BY stock_name을 통해 주식별로 집계

 

728x90

 

 

🖥️ SQL 풀이

  SELECT stock_name
       , SUM(CASE WHEN operation = 'Sell' THEN price
                  ELSE -1 * price 
             END) AS capital_gain_loss
    FROM Stocks
GROUP BY stock_name;

 

 

 

🔍 쿼리 분석

  • CASE WHEN operation = 'Sell' THEN price ELSE -1 * price END:
    • 매도(Sell) 시 이익으로 간주 → 그대로 더함
    • 매수(Buy) 시 손실로 간주 → 음수로 변환 후 더함
  • SUM(...): 전체 이득/손실 계산
  • GROUP BY stock_name: 주식별로 그룹화하여 결과 반환

 

 

📌 실행 예제

📊 입력 데이터

Stocks 테이블

stock_name operation operation_day price
Leetcode Buy 1 1000
Corona Masks Buy 2 10
Leetcode Sell 5 9000
Handbags Buy 17 30000
Corona Masks Sell 3 1010
Corona Masks Buy 4 1000
Corona Masks Sell 5 500
Corona Masks Buy 6 1000
Handbags Sell 29 7000
Corona Masks Sell 10 10000

 

쿼리 실행 결과

stock_name capital_gain_loss
Corona Masks 9500
Leetcode 8000
Handbags -23000

 

  • Corona Masks 는 수익 1010 + 500 + 10000 = 11510 / 손실 10 + 1000 + 1000 = 2010 이기 때문에 총수익은 11510 - 2010 = 9500입니다.
  • Leetcode는 수익 9000 / 손실 1000 이기 때문에 총수익은 9000 - 1000 = 8000입니다.
  • Handbags는 수익 7000 / 손실 30000 이기 때문에 7000 - 30000 = -23000입니다.

 

🎯 결론

이 문제는 간단한 조건부 계산(CASE WHEN)그룹 집계(GROUP BY)의 조합을 묻는 문제입니다.
특히 Buy를 음수로 처리해서 전체 이익/손실을 계산하는 방식은 다양한 회계/재무 관련 문제에서 자주 등장합니다.

이 개념을 익혀두면
👉 고객별 수익률 분석, 주문별 비용 집계 같은 실무 SQL 문제도 훨씬 수월하게 풀 수 있어요 😊

 

 


 

 

더 많은 SQL 문제 풀이를 보고 싶다면 LeetCode SQL 문제 모음을 확인해 보세요! 🚀

 

728x90
반응형

'LeetCode' 카테고리의 다른 글

[LeetCode] 601. Human Traffic of Stadium  (4) 2025.04.18
[LeetCode] 262. Trips and Users  (2) 2025.04.18
[LeetCode] 1158. Market Analysis 1  (0) 2025.04.16
[LeetCode] 608. Tree Node  (0) 2025.04.16
[LeetCode] 184. Department Highest Salary  (0) 2025.03.26