美文网首页
Leetcode1082. 销售分析I(简单)

Leetcode1082. 销售分析I(简单)

作者: kaka22 | 来源:发表于2020-07-08 10:39 被阅读0次

    题目
    产品表:Product

    +--------------+---------+
    | Column Name  | Type    |
    +--------------+---------+
    | product_id   | int     |
    | product_name | varchar |
    | unit_price   | int     |
    +--------------+---------+
    

    product_id 是这个表的主键.
    销售表:Sales

    +-------------+---------+
    | Column Name | Type    |
    +-------------+---------+
    | seller_id   | int     |
    | product_id  | int     |
    | buyer_id    | int     |
    | sale_date   | date    |
    | quantity    | int     |
    | price       | int     |
    +------ ------+---------+
    

    这个表没有主键,它可以有重复的行.
    product_id 是 Product 表的外键.

    编写一个 SQL 查询,查询总销售额最高的销售者,如果有并列的,就都展示出来。

    查询结果格式如下所示:

    Product 表:

    +------------+--------------+------------+
    | product_id | product_name | unit_price |
    +------------+--------------+------------+
    | 1          | S8           | 1000       |
    | 2          | G4           | 800        |
    | 3          | iPhone       | 1400       |
    +------------+--------------+------------+
    

    Sales 表:

    +-----------+------------+----------+------------+----------+-------+
    | seller_id | product_id | buyer_id | sale_date  | quantity | price |
    +-----------+------------+----------+------------+----------+-------+
    | 1         | 1          | 1        | 2019-01-21 | 2        | 2000  |
    | 1         | 2          | 2        | 2019-02-17 | 1        | 800   |
    | 2         | 2          | 3        | 2019-06-02 | 1        | 800   |
    | 3         | 3          | 4        | 2019-05-13 | 2        | 2800  |
    +-----------+------------+----------+------------+----------+-------+
    

    Result 表:

    +-------------+
    | seller_id   |
    +-------------+
    | 1           |
    | 3           |
    +-------------+
    

    Id 为 1 和 3 的销售者,销售总金额都为最高的 2800。

    生成数据

    CREATE TABLE Product(
    product_id   INT,     
    product_name VARCHAR(20), 
    unit_price   INT,
    PRIMARY KEY(product_id));
    
    INSERT INTO Product VALUE(1, 'S8', 1000),(2, 'G4', 800),(3, 'iPhone', 1400);
    
    CREATE TABLE Sales(
    seller_id   INT,     
    product_id  INT,     
    buyer_id    INT,     
    sale_date   DATE,    
    quantity    INT,     
    price       INT);
    #add constraint FK_ID foreign key(product_id) REFERENCES Product(product_id));
    
    INSERT INTO Sales VALUE(1, 1, 1, '2019-01-21', 2, 2000),(1, 2, 2, '2019-02-17', 1, 800),
    (2, 2, 3, '2019-06-02', 1, 800),(3, 3, 4, '2019-05-13', 2, 2800);
    

    解答
    先选出每个销售者的销售额

    SELECT S.`seller_id`, SUM(S.`price`)
    FROM Sales AS S
    GROUP BY S.`seller_id`;
    

    再选出最大的销售额

    SELECT MAX(tmp.all_price) as max_all_price
    FROM (
    SELECT S.`seller_id`, SUM(S.`price`) AS all_price
    FROM Sales AS S
    GROUP BY S.`seller_id`) tmp
    

    再对每个销售者的销售额表选出销量为最大的即可

    SELECT S.`seller_id`
    FROM Sales AS S
    GROUP BY S.`seller_id`
    HAVING SUM(S.`price`) = (SELECT MAX(tmp.all_price) AS max_all_price
    FROM (
    SELECT S.`seller_id`, SUM(S.`price`) AS all_price
    FROM Sales AS S
    GROUP BY S.`seller_id`) tmp);
    

    取最大值用limit也可

    SELECT SUM(price) AS `price`
    FROM sales
    GROUP BY seller_id
    ORDER BY price DESC
    LIMIT 0,1
    

    相关文章

      网友评论

          本文标题:Leetcode1082. 销售分析I(简单)

          本文链接:https://www.haomeiwen.com/subject/uxyqcktx.html