Leetcode1082. 销售分析I(简单)
2020-07-08 本文已影响0人
kaka22
题目
产品表: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