一、题目
表:DailySales
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| date_id | date |
| make_name | varchar |
| lead_id | int |
| partner_id | int |
+-------------+---------+
该表没有主键。
该表包含日期、产品的名称,以及售给的领导和合伙人的编号。
名称只包含小写英文字母。
写一条 SQL 语句,使得对于每一个 date_id 和 make_name,返回不同的 lead_id 以及不同的 partner_id 的数量。
按 任意顺序 返回结果表。 查询结果格式如下示例所示。
示例 1:
输入:
DailySales 表:
+-----------+-----------+---------+------------+
| date_id | make_name | lead_id | partner_id |
+-----------+-----------+---------+------------+
| 2020-12-8 | toyota | 0 | 1 |
| 2020-12-8 | toyota | 1 | 0 |
| 2020-12-8 | toyota | 1 | 2 |
| 2020-12-7 | toyota | 0 | 2 |
| 2020-12-7 | toyota | 0 | 1 |
| 2020-12-8 | honda | 1 | 2 |
| 2020-12-8 | honda | 2 | 1 |
| 2020-12-7 | honda | 0 | 1 |
| 2020-12-7 | honda | 1 | 2 |
| 2020-12-7 | honda | 2 | 1 |
+-----------+-----------+---------+------------+
输出:
+-----------+-----------+--------------+-----------------+
| date_id | make_name | unique_leads | unique_partners |
+-----------+-----------+--------------+-----------------+
| 2020-12-8 | toyota | 2 | 3 |
| 2020-12-7 | toyota | 1 | 2 |
| 2020-12-8 | honda | 2 | 2 |
| 2020-12-7 | honda | 3 | 2 |
+-----------+-----------+--------------+-----------------+
解释:
在 2020-12-8,丰田(toyota)有领导者 = [0, 1] 和合伙人 = [0, 1, 2] ,同时本田(honda)有领导者 = [1, 2] 和合伙人 = [1, 2]。
在 2020-12-7,丰田(toyota)有领导者 = [0] 和合伙人 = [1, 2] ,同时本田(honda)有领导者 = [0, 1, 2] 和合伙人 = [1, 2]。
- 来源:力扣(LeetCode)
- 链接:leetcode.cn/problems/da…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
创建数据表
根据题意创建数据表,填充数据
CREATE TABLE IF NOT EXISTS `DailySales`(
date_id DATE,
make_name VARCHAR(20),
lead_id INT,
partner_id INT
);
INSERT INTO DailySales VALUES
('2020-12-8', 'toyota', 0, 1),
('2020-12-8', 'toyota', 1, 0),
('2020-12-8', 'toyota', 1, 2),
('2020-12-7', 'toyota', 0, 2),
('2020-12-7', 'toyota', 0, 1),
('2020-12-8', 'honda', 1, 2),
('2020-12-8', 'honda', 2, 1),
('2020-12-7', 'honda', 0, 1),
('2020-12-7', 'honda', 1, 2),
('2020-12-7', 'honda', 2, 1);
解题
- 根据题意,要设置date_id 和 make_name的分组数据,这里设置GROUP BY date_id, make_name
- 返回不同的 lead_id 以及不同的 partner_id 的数量,这里要对两个字段进行去重,这里使用distinct
- 得到去重数据后要对数据进行计算,这里使用count计算
- 最终得到数据
SELECT
date_id, make_name, COUNT(DISTINCT lead_id) unique_leads, COUNT(DISTINCT partner_id) unique_partners
FROM
DailySales
GROUP BY
date_id, make_name;
- 显示结果
三、执行语句
测试结果
四、总结
本题还是对COUNT、DISTINCT、GROUP BY的综合使用,主要是分析清楚题意,本题就很简单了。