持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情
leetcode刷题1393-股票的资本损益
前文
本文内容为leetcode数据库类型题目,主要考查对于查询相关知识的掌握。本文解题方案为个人理解,并非最佳解决方案。该题目序号为1393,题目链接为leetcode.cn/problems/ca…
题目信息
Stocks 表:
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| stock_name | varchar |
| operation | enum |
| operation_day | int |
| price | int |
+---------------+---------+
(stock_name, day) 是这张表的主键 operation 列使用的是一种枚举类型,包括:('Sell','Buy') 此表的每一行代表了名为 stock_name 的某支股票在 operation_day 这一天的操作价格。 保证股票的每次'Sell'操作前,都有相应的'Buy'操作。
编写一个SQL查询来报告每支股票的资本损益。
股票的资本损益是一次或多次买卖股票后的全部收益或损失。
题目分析
根据题目信息,我们拥有一张股票的操作表,表中记录了每天股票的操作,共有若干股票同时存在于该表中。那么我们的题目目标是什么呢,是计算每只股票的损益。根据表结构与目标要求,分析得到想要解题首先需要根据股票名称进行数据的分组。分组后根据不同的股票来计算不同股票的损益。另外,由于股票的操作是有盈利有亏损,但表中存储的都是正值,因此我们在进行收益数据聚合时,要注意进行不同情况的区分。根据买入股票还是卖出股票,来区分实际收益是增加还是减少,也就是正负值上要进行哪一种处理。本题目主要是针对分组处理的考查,同时考查在sql语句中根据不同的情况进行条件处理的写法。至此,该题目解题完毕。
解题答案
# Write your MySQL query statement below
SELECT stock_name,
SUM(
CASE operation WHEN 'sell'
THEN price ELSE -price
END
) AS capital_gain_loss
FROM Stocks
GROUP BY stock_name
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。