SQL-leetcode—1393. 股票的资本损益

devtools/2025/2/12 7:41:47/

1393. 股票的资本损益

Stocks 表:

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| stock_name | varchar |
| operation | enum |
| operation_day | int |
| price | int |
±--------------±--------+
(stock_name, operation_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美元。

题解

编写解决方案报告每只股票的 资本损益。
股票的 资本利得/损失 是指一次或多次买卖该股票后的总收益或损失。

  • 计算逻辑:Buy 买入是负值,卖出时正值,if判断下即可

方法一 group by + sum + if

selectstock_name,sum(if(operation='Buy',-1,1)*price) as capital_gain_loss
from Stocks
group by stock_name

方法二 group by + sum +case when

selectstock_name,sum(case when operation='Buy' then price * -1 else price end) as capital_gain_loss
from Stocks
group by stock_name

http://www.ppmy.cn/devtools/158149.html

相关文章

C语言基础系列【9】常见存储类型介绍

博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x1f…

嵌入式工程师面试经验分享与案例解析

嵌入式工程师岗位受到众多求职者的关注。面试流程严格,技术要求全面,涵盖C/C编程、数据结构与算法、操作系统、嵌入式系统开发、硬件驱动等多个方向。本文将结合真实案例,深入剖析嵌入式工程师的面试流程、常见问题及应对策略,帮助…

Spring中常见的设计模式

Spring框架是一个庞大的生态系统,设计模式的应用广泛分布在其各个模块中。以下是针对你提到的设计模式,在Spring源码中的具体应用位置: 单例模式(Singleton Pattern): 在org.springframework.beans.factory…

什么是动态路由和嵌套路由?

动态路由和嵌套路由是 Vue Router 中的两个重要概念,它们可以帮助构建复杂的单页应用程序(SPA)。以下是对这两个概念的详细解释: 一、动态路由 定义 动态路由是指根据特定条件或参数动态生成的路由。它允许你在运行时根据 URL 中的参数或其他条件加载不同的组件。 使用…

Office hour 1

涉及Python环境配置、深度学习框架安装、常用数据处理和分析库、以及Python IDE的选择等内容。 1. Anaconda 安装与配置 • Anaconda Individual Edition:Anaconda 是一个开源平台,旨在简化数据科学的工作流程,提供了 Python 和超过 150 个科…

oracle11g搭建主从集群

安装oracle11g参考:centos安装oracle11g数据库-CSDN博客 一、主库操作 sqlplus / as sysdba 1、开启归档模式和强制日志模式 shutdown immediate startup mount #开启归档模式和强制日志模式 alter database archivelog; alter database force logging; #开启补…

VertexList(顶点列表)里的 normal(法线)

含义 在三维空间里,每个顶点的法线是一个单位向量(长度为 1),它垂直于该顶点所在的表面。对于平面来说,平面上所有顶点的法线方向是相同的;而对于曲面,每个顶点的法线方向通常会根据曲面的局部…

代码随想录算法【Day40】

Day40 121. 买卖股票的最佳时机 class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();if (len 0) return 0;vector<vector<int>> dp(len, vector<int>(2));dp[0][0] - prices[0];dp[0][1] 0;for(int i 1; i…