📝 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 문제 해결 방법
- CASE WHEN 문을 사용하여 거래 유형에 따라 값을 다르게 처리
- Sell → 그대로 더함 (수익)
- Buy → 음수로 변환하여 더함 (비용)
- SUM() 함수로 각 주식별 자본 이득/손실 계산
- 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 |