2022年10月更文挑战30-14-leetcode刷题1393-股票的资本损益

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。