探索云世界
【LeetCode-SQL专项突破】-第9天:控制流
2022-05-31166
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:【LeetCode-SQL专项突破】-第9天:控制流
1393.股票的资本损益
🚀 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查询结果的格式如下例所示: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 |+---------------+-----------+---------------+--------+Result 表:+---------------+-------------------+| 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美元。🐴🐴 答案# Write your MySQL query statement belowselect stock_name,sum(case when operation='Sell' then price else 0 end)-sum(case when operation='Buy' then price else 0 end)capital_gain_lossfrom Stocksgroup by stock_name/* Write your T-SQL query statement below */select stock_name,sum(case when operation='buy' then -priceelse price end ) as 'capital_gain_loss'from Stocksgroup by stock_name/* Write your PL/SQL query statement below */select stock_name "stock_name",sum( case when operation = 'Sell' then price when operation = 'Buy' then -price end) as "capital_gain_loss"from Stocksgroup by stock_name
1407.排名靠前的旅行者
🚀表:Users+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || name | varchar |+---------------+---------+id 是该表单主键。name 是用户名字。表:Rides+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || user_id | int || distance | int |+---------------+---------+id 是该表单主键。user_id 是本次行程的用户的 id, 而该用户此次行程距离为 distance 。🚀 需求写一段 SQL , 报告每个用户的旅行距离。返回的结果表单,以 travelled_distance 降序排列 ,如果有两个或者更多的用户旅行了相同的距离, 那么再以 name 升序排列 。查询结果格式如下例所示。Users 表:+------+-----------+| id | name |+------+-----------+| 1 | Alice || 2 | Bob || 3 | Alex || 4 | Donald || 7 | Lee || 13 | Jonathan || 19 | Elvis |+------+-----------+Rides 表:+------+----------+----------+| id | user_id | distance |+------+----------+----------+| 1 | 1 | 120 || 2 | 2 | 317 || 3 | 3 | 222 || 4 | 7 | 100 || 5 | 13 | 312 || 6 | 19 | 50 || 7 | 7 | 120 || 8 | 19 | 400 || 9 | 7 | 230 |+------+----------+----------+Result 表:+----------+--------------------+| name | travelled_distance |+----------+--------------------+| Elvis | 450 || Lee | 450 || Bob | 317 || Jonathan | 312 || Alex | 222 || Alice | 120 || Donald | 0 |+----------+--------------------+Elvis 和 Lee 旅行了 450 英里,Elvis 是排名靠前的旅行者,因为他的名字在字母表上的排序比 Lee 更小。Bob, Jonathan, Alex 和 Alice 只有一次行程,我们只按此次行程的全部距离对他们排序。Donald 没有任何行程, 他的旅行距离为 0。🐴🐴 答案# Write your MySQL query statement belowselect max(name) name,ifnull(sum(distance),0) travelled_distancefrom Users u left join Rides r on r.user_id=u.idgroup by r.user_idorder by travelled_distance desc,name/* Write your T-SQL query statement below */select max(name) name,isnull(sum(distance),0) travelled_distancefrom Users u left join Rides r on r.user_id=u.idgroup by r.user_idorder by travelled_distance desc,name/* Write your PL/SQL query statement below */select max(name) "name",sum(nvl(distance,0)) "travelled_distance"from Users u left join Rides r on r.user_id=u.idgroup by r.user_idorder by 2 desc,1
1158.市场分析 I
🚀 Table: Users+----------------+---------+| Column Name | Type |+----------------+---------+| user_id | int || join_date | date || favorite_brand | varchar |+----------------+---------+此表主键是 user_id。表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。Table: Orders+---------------+---------+| Column Name | Type |+---------------+---------+| order_id | int || order_date | date || item_id | int || buyer_id | int || seller_id | int |+---------------+---------+此表主键是 order_id。外键是 item_id 和(buyer_id,seller_id)。Table: Items+---------------+---------+| Column Name | Type |+---------------+---------+| item_id | int || item_brand | varchar |+---------------+---------+此表主键是 item_id。🚀 需求请写出一条SQL语句以查询每个用户的注册日期和在 2019 年作为买家的订单总数。以 任意顺序 返回结果表。查询结果格式如下。示例 1:输入:Users 表:+---------+------------+----------------+| user_id | join_date | favorite_brand |+---------+------------+----------------+| 1 | 2018-01-01 | Lenovo || 2 | 2018-02-09 | Samsung || 3 | 2018-01-19 | LG || 4 | 2018-05-21 | HP |+---------+------------+----------------+Orders 表:+----------+------------+---------+----------+-----------+| order_id | order_date | item_id | buyer_id | seller_id |+----------+------------+---------+----------+-----------+| 1 | 2019-08-01 | 4 | 1 | 2 || 2 | 2018-08-02 | 2 | 1 | 3 || 3 | 2019-08-03 | 3 | 2 | 3 || 4 | 2018-08-04 | 1 | 4 | 2 || 5 | 2018-08-04 | 1 | 3 | 4 || 6 | 2019-08-05 | 2 | 2 | 4 |+----------+------------+---------+----------+-----------+Items 表:+---------+------------+| item_id | item_brand |+---------+------------+| 1 | Samsung || 2 | Lenovo || 3 | LG || 4 | HP |+---------+------------+输出:+-----------+------------+----------------+| buyer_id | join_date | orders_in_2019 |+-----------+------------+----------------+| 1 | 2018-01-01 | 1 || 2 | 2018-02-09 | 2 || 3 | 2018-01-19 | 0 || 4 | 2018-05-21 | 0 |+-----------+------------+----------------+🐴🐴 答案# Write your MySQL query statement belowSELECT user_id AS buyer_id, join_date, IFNULL(Buy.cnt, 0) AS orders_in_2019FROM UsersLEFT JOIN ( SELECT buyer_id, COUNT(order_id) AS cnt FROM Orders WHERE Year(order_date)='2019' GROUP BY buyer_id) AS BuyON user_id=Buy.buyer_id/* Write your T-SQL query statement below */SELECT user_id AS buyer_id, join_date, isnull(Buy.cnt,0) AS orders_in_2019FROM UsersLEFT JOIN ( SELECT buyer_id, COUNT(order_id) AS cnt FROM Orders WHERE Year(order_date)='2019' GROUP BY buyer_id) BuyON user_id=Buy.buyer_id/* Write your PL/SQL query statement below */select buyer_id "buyer_id",to_char(max(join_date),'yyyy-mm-dd') "join_date",count(case when to_number(to_char(order_date,'yyyy')) = 2019 then order_idelse null end) "orders_in_2019"from Users a,Orders bwhere a.user_id = b. buyer_idgroup by buyer_idorder by 1
关键词:
目录
相关文章
热门文章
最新文章
1
什么!我把SQL编辑器装进了大模型?
2
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
3
实现MySQL与SQL Server之间数据迁移的有效方法
4
【LeetCode 热题100】BFS/DFS 实战:岛屿数量& 腐烂的橘子(力扣200 / 994 )(Go语言版)
5
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
6
【LeetCode 热题100】回溯:括号生成& 组合总和(力扣22 / 39 )(Go语言版)
7
【LeetCode 热题100】BFS/DFS 实战:岛屿数量& 腐烂的橘子(力扣200 / 994 )(Go语言版)
8
力扣第一道困难题《3. 无重复字符的最长子串》,c++
9
【翻译】SQL Server索引进阶:第七级,过滤的索引
10
Oracle笔记 十三、PL/SQL面向对象之package
1
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
129
2
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
129
3
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
118
4
刷算法Leetcode---9(二叉树篇Ⅲ)
89
5
2670.找出不同元素数目差数组-力扣(LeetCode)
87
6
821.字符的最短距离-力扣(LeetCode)
103
7
力扣经典150题第六十题:反转链表 II
84
8
力扣经典150题第五十九题: 随机链表的复制
93
9
力扣经典150题第五十八题:合并两个有序链表
93
10
力扣经典150题第五十六题:环形链表
86
相关实验场景
更多下一篇