返回介绍

solution / 1300-1399 / 1393.Capital GainLoss / README

发布于 2024-06-17 01:03:20 字数 2738 浏览 0 评论 0 收藏 0

1393. 股票的资本损益

English Version

题目描述

Stocks 表:

+---------------+---------+
| Column Name   | Type  |
+---------------+---------+
| stock_name  | varchar |
| operation   | enum  |
| operation_day | int   |
| price     | int   |
+---------------+---------+
(stock_name, day) 是这张表的主键(具有唯一值的列的组合)
operation 列使用的是一种枚举类型,包括:('Sell','Buy')
此表的每一行代表了名为 stock_name 的某支股票在 operation_day 这一天的操作价格。
此表可以保证,股票的每个“卖出”操作在前一天都有相应的“买入”操作。并且,股票的每个“买入”操作在即将到来的一天都有相应的“卖出”操作。

 

编写解决方案报告每只股票的 资本损益

股票的 资本利得/损失 是指一次或多次买卖该股票后的总收益或损失。

任意顺序 返回结果表。

结果格式如下所示。

 

示例 1:

输入:
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      |
+---------------+-------------------+
解释:
Leetcode 股票在第一天以1000美元的价格买入,在第五天以9000美元的价格卖出。资本收益=9000-1000=8000美元。
Handbags 股票在第17天以30000美元的价格买入,在第29天以7000美元的价格卖出。资本损失=7000-30000=-23000美元。
Corona Masks 股票在第1天以10美元的价格买入,在第3天以1010美元的价格卖出。在第4天以1000美元的价格再次购买,在第5天以500美元的价格出售。最后,它在第6天以1000美元的价格被买走,在第10天以10000美元的价格被卖掉。资本损益是每次(’Buy'->'Sell')操作资本收益或损失的和=(1010-10)+(500-1000)+(10000-1000)=1000-500+9000=9500美元。

解法

方法一:GROUP BY + SUM(IF())

我们使用 GROUP BY 将同一支股票的买卖操作分组,然后使用 SUM(IF()) 计算每支股票的资本损益。

# Write your MySQL query statement below
SELECT
  stock_name,
  SUM(IF(operation = 'Buy', -price, price)) AS capital_gain_loss
FROM Stocks
GROUP BY 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文