1693. 每天的领导和合伙人

97 阅读2分钟

一、题目

表: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;
  • 显示结果

image.png

三、执行语句

测试结果

image.png

四、总结

本题还是对COUNT、DISTINCT、GROUP BY的综合使用,主要是分析清楚题意,本题就很简单了。