일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Dynamic Programming
- 백준 온라인 저지
- datacamp
- delete join
- hackerrank
- 데이터 엔지니어
- 2023년 목표
- docker
- 프로그래머스
- MySQL
- telegram
- docker image
- 그리디
- 빅데이터를 지탱하는 기술
- BOT
- 백준온라인저지
- Python
- Pseudo Lab
- Spark
- data_engineer
- Data Engineering
- airflow webserver
- docker container
- terraform
- Airflow
- dsf
- 알고리즘
- SQL
- leetcode
- airflow architecture
Archives
- Today
- Total
Lim Seunghyun Space
[LeetCode] Capital Gain/Loss 본문
문제 출처
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 |