欢迎来到 SQL 语句使用指南的专栏!📊 无论你是刚接触数据库的新手,还是希望精进技能的开发者,这里都能为你提供实用的 SQL 知识与技巧。
SQL 作为数据查询与管理的核心语言,早已成为后端开发、数据分析、运维等岗位的必备技能。从简单的单表查询到复杂的多表关联,从数据筛选到聚合分析,掌握 SQL 不仅能提升工作效率,更能帮你从海量数据中挖掘有价值的信息🔍。
在这个专栏里,我们会从基础语法讲起,逐步深入到高级用法。你将学到如何通过 JOIN 语句实现多表关联查询,如何用子查询解决复杂逻辑,如何优化 SQL 性能以应对大数据量场景…… 每一篇文章都会搭配具体案例,让抽象的语法变得通俗易懂💡。
无论你是想解决工作中遇到的 SQL 难题,还是为面试做准备,都不妨跟着我们的节奏一步步探索。如果在学习过程中有任何疑问,欢迎在评论区留言交流,让我们一起在实践中成长,真正做到学以致用,让 SQL 成为你职业生涯中的得力工具🚀!
目录
一.题目描述
表:
DailySales
+-------------+---------+ | Column Name | Type | +-------------+---------+ | date_id | date | | make_name | varchar | | lead_id | int | | partner_id | int | +-------------+---------+ 该表没有主键(具有唯一值的列)。它可能包含重复项。 该表包含日期、产品的名称,以及售给的领导和合伙人的编号。 名称只包含小写英文字母。对于每一个
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]。
二.解题思路
①先使用group by,根据make_name, date_id这两个字段进行分组
②使用count(distinct lead_id)计算出每组的领导数(已去重)、使用count(distinct partner_id)计算出每组的合伙人数(已去重)
三.代码
select date_id, make_name, count(distinct lead_id) as unique_leads, count(distinct partner_id) as unique_partners
from DailySales
group by make_name, date_id
四.重点掌握
1.distinct去重函数
count(distinct lead_id)表示,要先在每组中,将lead_id字段去重,然后再统计lead_id的数量。
说白了就是求出每组不同的领导有多少个。