Leetcode1082. 销售分析I(简单)

题目
产品表: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(简单))