持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
一、问题描述
表: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
的数量。
按 任意顺序 返回结果表。
查询结果格式如下示例所示。
题目链接:每天的领导和合伙人
二、题目要求
样例
输入:
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]。
考察
1.聚合函数
2.建议用时10~25min
三、问题分析
题目简单说就是相同的 date_id 和 make_name
代表一组数据,计算出这一行不重复的unique_leads 和unique_partners
的数值。
这一题主要考察聚合函数的使用,分组的对象不是单一的数据,而是date_id | make_name
共同分组,对分组之后的结果,每一行的领导和合伙人做唯一化计数处理,其中唯一化可以使用distinct
处理,最后得出的结果就是题目要求的数据。
四、编码实现
select date_id,make_name,
count(distinct lead_id) as 'unique_leads',count(distinct partner_id) as 'unique_partners'
from DailySales
group by date_id,make_name