• SQL练习03


    1.每月交易

    SQL

    Create table If Not Exists Transactions (id int, country varchar(4), state enum('approved', 'declined'), amount int, trans_date date);
    Truncate table Transactions;
    insert into Transactions (id, country, state, amount, trans_date) values ('121', 'US', 'approved', '1000', '2018-12-18');
    insert into Transactions (id, country, state, amount, trans_date) values ('122', 'US', 'declined', '2000', '2018-12-19');
    insert into Transactions (id, country, state, amount, trans_date) values ('123', 'US', 'approved', '2000', '2019-01-01');
    insert into Transactions (id, country, state, amount, trans_date) values ('124', 'DE', 'approved', '2000', '2019-01-07');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    表:Transactions

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | id            | int     |
    | country       | varchar |
    | state         | enum    |
    | amount        | int     |
    | trans_date    | date    |
    +---------------+---------+
    id 是这个表的主键。
    该表包含有关传入事务的信息。
    state 列类型为 ["approved", "declined"] 之一。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。

    任意顺序 返回结果表。

    查询结果格式如下所示。

    示例 1:

    输入:
    Transactions table:
    +------+---------+----------+--------+------------+
    | id   | country | state    | amount | trans_date |
    +------+---------+----------+--------+------------+
    | 121  | US      | approved | 1000   | 2018-12-18 |
    | 122  | US      | declined | 2000   | 2018-12-19 |
    | 123  | US      | approved | 2000   | 2019-01-01 |
    | 124  | DE      | approved | 2000   | 2019-01-07 |
    +------+---------+----------+--------+------------+
    输出:
    +----------+---------+-------------+----------------+--------------------+-----------------------+
    | month    | country | trans_count | approved_count | trans_total_amount | approved_total_amount |
    +----------+---------+-------------+----------------+--------------------+-----------------------+
    | 2018-12  | US      | 2           | 1              | 3000               | 1000                  |
    | 2019-01  | US      | 1           | 1              | 2000               | 2000                  |
    | 2019-01  | DE      | 1           | 1              | 2000               | 2000                  |
    +----------+---------+-------------+----------------+--------------------+-----------------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    思路

    1.查找每个月国家/地区。利用group by DATE_FORMAT(trans_date, '%Y-%m'),country
    2.查找总的事务数。第一步已经将数据按月和国家聚合,只需要使用count函数
    3.查找总金额。使用sum函数计算总金额
    4.查找已批准的事物数。
    5.查找已批准的事物的总金额。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    题解

    SELECT DATE_FORMAT(trans_date, '%Y-%m') AS month,
        country,
        COUNT(*) AS trans_count,
        COUNT(IF(state = 'approved', 1, NULL)) AS approved_count,
        SUM(amount) AS trans_total_amount,
        SUM(IF(state = 'approved', amount, 0)) AS approved_total_amount
    FROM Transactions
    GROUP BY month, country
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.最后一个能进入巴士的人

    SQL

    Create table If Not Exists Queue (person_id int, person_name varchar(30), weight int, turn int);
    Truncate table Queue;
    insert into Queue (person_id, person_name, weight, turn) values ('5', 'Alice', '250', '1');
    insert into Queue (person_id, person_name, weight, turn) values ('4', 'Bob', '175', '5');
    insert into Queue (person_id, person_name, weight, turn) values ('3', 'Alex', '350', '2');
    insert into Queue (person_id, person_name, weight, turn) values ('6', 'John Cena', '400', '3');
    insert into Queue (person_id, person_name, weight, turn) values ('1', 'Winston', '500', '6');
    insert into Queue (person_id, person_name, weight, turn) values ('2', 'Marie', '200', '4');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    表: Queue

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | person_id   | int     |
    | person_name | varchar |
    | weight      | int     |
    | turn        | int     |
    +-------------+---------+
    person_id 是这个表具有唯一值的列。
    该表展示了所有候车乘客的信息。
    表中 person_id 和 turn 列将包含从 1 到 n 的所有数字,其中 n 是表中的行数。
    turn 决定了候车乘客上巴士的顺序,其中 turn=1 表示第一个上巴士,turn=n 表示最后一个上巴士。
    weight 表示候车乘客的体重,以千克为单位。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    有一队乘客在等着上巴士。然而,巴士有1000 千克 的重量限制,所以其中一部分乘客可能无法上巴士。

    编写解决方案找出 最后一个 上巴士且不超过重量限制的乘客,并报告 person_name 。题目测试用例确保顺位第一的人可以上巴士且不会超重。

    返回结果格式如下所示。

    示例 1:

    输入:
    Queue 表
    +-----------+-------------+--------+------+
    | person_id | person_name | weight | turn |
    +-----------+-------------+--------+------+
    | 5         | Alice       | 250    | 1    |
    | 4         | Bob         | 175    | 5    |
    | 3         | Alex        | 350    | 2    |
    | 6         | John Cena   | 400    | 3    |
    | 1         | Winston     | 500    | 6    |
    | 2         | Marie       | 200    | 4    |
    +-----------+-------------+--------+------+
    输出:
    +-------------+
    | person_name |
    +-------------+
    | John Cena   |
    +-------------+
    解释:
    为了简化,Queue 表按 turn 列由小到大排序。
    +------+----+-----------+--------+--------------+
    | Turn | ID | Name      | Weight | Total Weight |
    +------+----+-----------+--------+--------------+
    | 1    | 5  | Alice     | 250    | 250          |
    | 2    | 3  | Alex      | 350    | 600          |
    | 3    | 6  | John Cena | 400    | 1000         | (最后一个上巴士)
    | 4    | 2  | Marie     | 200    | 1200         | (无法上巴士)
    | 5    | 4  | Bob       | 175    | ___          |
    | 6    | 1  | Winston   | 500    | ___          |
    +------+----+-----------+--------+--------------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    思路

    1.获取下一位上车的人,计算总体重 
    2.根据turn进行降序排序
    3.判断当前上车的人总体重是否超过1000
    4.保留最后一个能进入巴士的人
    
    • 1
    • 2
    • 3
    • 4

    题解

    方式一:
    select *
    from Queue t1,Queue t2
    where t1.turn>=t2.turn
    group by t1.person_id
    having sum(t2.weight) <=1000
    order by t1.turn desc
    limit 1
    
    方式二:
    select person_name
    from
    (
    select *,sum(weight) over(order by turn)as Total_Weight
    from Queue
    )t
    where Total_Weight<=1000
    order by Total_Weight desc
    limit 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3.餐馆营业额变化增长

    SQL

    Create table If Not Exists Customer (customer_id int, name varchar(20), visited_on date, amount int);
    Truncate table Customer;
    insert into Customer (customer_id, name, visited_on, amount) values ('1', 'Jhon', '2019-01-01', '100');
    insert into Customer (customer_id, name, visited_on, amount) values ('2', 'Daniel', '2019-01-02', '110');
    insert into Customer (customer_id, name, visited_on, amount) values ('3', 'Jade', '2019-01-03', '120');
    insert into Customer (customer_id, name, visited_on, amount) values ('4', 'Khaled', '2019-01-04', '130');
    insert into Customer (customer_id, name, visited_on, amount) values ('5', 'Winston', '2019-01-05', '110');
    insert into Customer (customer_id, name, visited_on, amount) values ('6', 'Elvis', '2019-01-06', '140');
    insert into Customer (customer_id, name, visited_on, amount) values ('7', 'Anna', '2019-01-07', '150');
    insert into Customer (customer_id, name, visited_on, amount) values ('8', 'Maria', '2019-01-08', '80');
    insert into Customer (customer_id, name, visited_on, amount) values ('9', 'Jaze', '2019-01-09', '110');
    insert into Customer (customer_id, name, visited_on, amount) values ('1', 'Jhon', '2019-01-10', '130');
    insert into Customer (customer_id, name, visited_on, amount) values ('3', 'Jade', '2019-01-10', '150');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    表: Customer

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | customer_id   | int     |
    | name          | varchar |
    | visited_on    | date    |
    | amount        | int     |
    +---------------+---------+SQL 中,(customer_id, visited_on) 是该表的主键。
    该表包含一家餐馆的顾客交易数据。
    visited_on 表示 (customer_id) 的顾客在 visited_on 那天访问了餐馆。
    amount 是一个顾客某一天的消费总额。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。

    计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount保留两位小数。

    结果按 visited_on 升序排序

    返回结果格式的例子如下。

    示例 1:

    输入:
    Customer 表:
    +-------------+--------------+--------------+-------------+
    | customer_id | name         | visited_on   | amount      |
    +-------------+--------------+--------------+-------------+
    | 1           | Jhon         | 2019-01-01   | 100         |
    | 2           | Daniel       | 2019-01-02   | 110         |
    | 3           | Jade         | 2019-01-03   | 120         |
    | 4           | Khaled       | 2019-01-04   | 130         |
    | 5           | Winston      | 2019-01-05   | 110         | 
    | 6           | Elvis        | 2019-01-06   | 140         | 
    | 7           | Anna         | 2019-01-07   | 150         |
    | 8           | Maria        | 2019-01-08   | 80          |
    | 9           | Jaze         | 2019-01-09   | 110         | 
    | 1           | Jhon         | 2019-01-10   | 130         | 
    | 3           | Jade         | 2019-01-10   | 150         | 
    +-------------+--------------+--------------+-------------+
    输出:
    +--------------+--------------+----------------+
    | visited_on   | amount       | average_amount |
    +--------------+--------------+----------------+
    | 2019-01-07   | 860          | 122.86         |
    | 2019-01-08   | 840          | 120            |
    | 2019-01-09   | 840          | 120            |
    | 2019-01-10   | 1000         | 142.86         |
    +--------------+--------------+----------------+
    解释:
    第一个七天消费平均值从 2019-01-012019-01-07 是restaurant-growth/restaurant-growth/ (100 + 110 + 120 + 130 + 110 + 140 + 150)/7 = 122.86
    第二个七天消费平均值从 2019-01-022019-01-08(110 + 120 + 130 + 110 + 140 + 150 + 80)/7 = 120
    第三个七天消费平均值从 2019-01-032019-01-09(120 + 130 + 110 + 140 + 150 + 80 + 110)/7 = 120
    第四个七天消费平均值从 2019-01-042019-01-10(130 + 110 + 140 + 150 + 80 + 110 + 130 + 150)/7 = 142.86
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    思路

    第一个七天消费平均值从 2019-01-012019-01-07 (获取2019-01-07 营业额,作为7天的营业额)
    第二个七天消费平均值从 2019-01-022019-01-08 以此类推,
    1.根据visited_on 分组,计算每天的营业额
    2.在计算从第一天到第七天的累计营业额 sum()over()
    3.将累计营业额进行排序 rank()over() 
    4.筛选累计不到7天的营业额,where rk>=7 
    5.再根据visited_on 分组,计算每个7天营业额的平均  round(sum(amount)/7,2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    题解

    select 
    	visited_on,
       amount,
       round(sum(amount)/7,2) average_amount
    from 
    (
    	-- 获取日期、排名、累计的营业额
    	select 
    		visited_on,
    		rank()over(order by visited_on) as rk,
    		sum(sum(amount))over(order by visited_on range interval 6 day preceding) as amount
    	from Customer
    	group by visited_on
    )AS tep
    where rk>=7 
    group by visited_on
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.电影评分

    SQL

    Create table If Not Exists Movies (movie_id int, title varchar(30));
    Create table If Not Exists Users (user_id int, name varchar(30));
    Create table If Not Exists MovieRating (movie_id int, user_id int, rating int, created_at date);
    Truncate table Movies;
    insert into Movies (movie_id, title) values ('1', 'Avengers');
    insert into Movies (movie_id, title) values ('2', 'Frozen 2');
    insert into Movies (movie_id, title) values ('3', 'Joker');
    Truncate table Users;
    insert into Users (user_id, name) values ('1', 'Daniel');
    insert into Users (user_id, name) values ('2', 'Monica');
    insert into Users (user_id, name) values ('3', 'Maria');
    insert into Users (user_id, name) values ('4', 'James');
    Truncate table MovieRating;
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '1', '3', '2020-01-12');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '2', '4', '2020-02-11');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '3', '2', '2020-02-12');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('1', '4', '1', '2020-01-01');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '1', '5', '2020-02-17');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '2', '2', '2020-02-01');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('2', '3', '2', '2020-03-01');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('3', '1', '3', '2020-02-22');
    insert into MovieRating (movie_id, user_id, rating, created_at) values ('3', '2', '4', '2020-02-25');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    表:Movies

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | movie_id      | int     |
    | title         | varchar |
    +---------------+---------+
    movie_id 是这个表的主键(具有唯一值的列)。
    title 是电影的名字。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    表:Users

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | user_id       | int     |
    | name          | varchar |
    +---------------+---------+
    user_id 是表的主键(具有唯一值的列)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    表:MovieRating

    +---------------+---------+
    | Column Name   | Type    |
    +---------------+---------+
    | movie_id      | int     |
    | user_id       | int     |
    | rating        | int     |
    | created_at    | date    |
    +---------------+---------+
    (movie_id, user_id) 是这个表的主键(具有唯一值的列的组合)。
    这个表包含用户在其评论中对电影的评分 rating 。
    created_at 是用户的点评日期。 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    请你编写一个解决方案:

    • 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。
    • 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。

    字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。

    返回结果格式如下例所示。

    示例 1:

    输入:
    Movies 表:
    +-------------+--------------+
    | movie_id    |  title       |
    +-------------+--------------+
    | 1           | Avengers     |
    | 2           | Frozen 2     |
    | 3           | Joker        |
    +-------------+--------------+
    Users 表:
    +-------------+--------------+
    | user_id     |  name        |
    +-------------+--------------+
    | 1           | Daniel       |
    | 2           | Monica       |
    | 3           | Maria        |
    | 4           | James        |
    +-------------+--------------+
    MovieRating 表:
    +-------------+--------------+--------------+-------------+
    | movie_id    | user_id      | rating       | created_at  |
    +-------------+--------------+--------------+-------------+
    | 1           | 1            | 3            | 2020-01-12  |
    | 1           | 2            | 4            | 2020-02-11  |
    | 1           | 3            | 2            | 2020-02-12  |
    | 1           | 4            | 1            | 2020-01-01  |
    | 2           | 1            | 5            | 2020-02-17  | 
    | 2           | 2            | 2            | 2020-02-01  | 
    | 2           | 3            | 2            | 2020-03-01  |
    | 3           | 1            | 3            | 2020-02-22  | 
    | 3           | 2            | 4            | 2020-02-25  | 
    +-------------+--------------+--------------+-------------+
    输出:
    Result 表:
    +--------------+
    | results      |
    +--------------+
    | Daniel       |
    | Frozen 2     |
    +--------------+
    解释:
    Daniel 和 Monica 都点评了 3 部电影("Avengers", "Frozen 2""Joker") 但是 Daniel 字典序比较小。
    Frozen 2 和 Joker 在 2 月的评分都是 3.5,但是 Frozen 2 的字典序比较小。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    题解

    select results
    from 
    (
    -- 查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名
    select t2.name results   
    from MovieRating t1
    left join Users  t2
    on t1.user_id=t2.user_id
    group by t2.user_id
    order by count(t2.user_id) desc,t2.name
    limit 1
    )t1
    
    union all
    
    select results
    from (
    -- 查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。
    select m.title results
    from MovieRating mr 
    left join Movies m using(movie_id)
    where date_format(mr.created_at,'%Y-%m') = '2020-02'
    group by m.movie_id
    order by avg(rating) desc, m.title asc
    limit 1
    )t2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    5.股票的资本损益

    SQL

    Create Table If Not Exists Stocks (stock_name varchar(15), operation ENUM('Sell', 'Buy'), operation_day int, price int);
    Truncate table Stocks;
    insert into Stocks (stock_name, operation, operation_day, price) values ('Leetcode', 'Buy', '1', '1000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '2', '10');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Leetcode', 'Sell', '5', '9000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Handbags', 'Buy', '17', '30000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '3', '1010');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '4', '1000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '5', '500');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Buy', '6', '1000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Handbags', 'Sell', '29', '7000');
    insert into Stocks (stock_name, operation, operation_day, price) values ('Corona Masks', 'Sell', '10', '10000');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

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

    任意顺序 返回结果表。

    结果格式如下所示。

    示例 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美元。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    题解

    方式一:
    select stock_name, sum(if(operation='Sell',price,-1*price)) capital_gain_loss 
    from Stocks 
    group by stock_name
    order by capital_gain_loss desc
    
    方式二:
    select
        stock_name,
        sum(
            case
            when operation = 'Buy' then -price
            when operation = 'Sell' then price
            end
        ) as capital_gain_loss
    from stocks
    group by stock_name
    order by capital_gain_loss desc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    Java基础
    Postman接口断言&上下游参数传递
    牛血清白蛋白-铂复合纳米材料/HSA-Pc NPs人血清白蛋白(HSA)包裹酞菁分子纳米粒
    机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》
    【云原生之kubernetes实战】在k8s环境下部署Snipe-IT固定资产管理平台
    TLS版本及CipherSuites确认及设置
    mysql数据库
    React Native性能优化红宝书
    AD7792/AD7793 备忘
    hadoop-2.7.3安装
  • 原文地址:https://blog.csdn.net/weixin_44464850/article/details/134520512