SQL 培训计划

SQL学习分析计划 阶段 1:数据展示和基础了解 目标: 学习如何“查看”表格并从中提取信息。 你想做什么? SQL 命令(示例) 解释 查看所有内容 SELECT * FROM users; * 表示“所有列”。你获取了完整的数据集。 选择特定列 SELECT first_name, email, country FROM users; 与 * 不同,你提供了感兴趣的列名。 限制结果数量 SELECT * FROM users LIMIT 10; LIMIT 非常有用,可以避免一次性检索到数百万行数据。 练习任务: 从表格中显示前 20 个用户的名字、姓氏和城市( first_name , last_name , city )。 阶段 2:数据过滤——查找特定信息 目标: 学习提出问题,并只提取符合特定条件的行。 你想做什么? SQL 命令(示例) 说明 查找来自波兰的用户 SELECT * FROM users WHERE country = 'Poland'; = 用于比较。文本始终放入单引号(')中。 查找年龄超过 30 岁用户 SELECT first_name, age FROM users WHERE age > 30; 操作符 > , , >= , 用于数字。 组合条件 (AND) SELECT * FROM users WHERE country = 'Poland' AND age > 30; AND 要求两个条件都必须满足。 在文本中查找模式 (LIKE) SELECT email FROM users WHERE email LIKE '%@gmail.com'; % 是任意字符序列。适用于搜索文本片段。 检查空值 (NULL) SELECT * FROM users WHERE postal_code IS NULL; 使用 IS NULL 来检查空(未定义)值。 练习任务: 查找所有来自德国( Germany )且年龄( age )在 25 到 45 岁之间的用户。 第 3 阶段:数据聚合和排序——创建摘要 目标: 学习分组数据以获取统计信息(例如,某个国家有多少用户)以及排序结果。 你想做什么? SQL 语句(示例) 说明 对用户进行排序 SELECT * FROM users ORDER BY created_at DESC; ORDER BY 对结果进行排序。 DESC 是降序, ASC 是升序。 计算行数(COUNT) SELECT COUNT(id) FROM users; COUNT() 计算组或整个表中的行数。 分组数据(GROUP BY) SELECT country, COUNT(*) FROM users GROUP BY country; GROUP BY 将具有相同值的行“折叠”成一行,从而实现聚合。 计算平均值(AVG) SELECT AVG(age) FROM users; AVG() (平均值), SUM() (总和), MAX() (最大值), MIN() (最小值) 是聚合函数。 按聚合结果过滤(HAVING) SELECT country, COUNT(*) FROM users GROUP BY country HAVING COUNT(*) > 100; HAVING 的作用类似于 WHERE ,但它是在分组之后对结果进行过滤。 练习任务: 计算每个来源( traffic_source )注册了多少用户。只显示来自超过 50 个用户的来源,并按最受欢迎的来源对结果进行排序。 第 4 阶段:处理日期和时间 目标: 学会根据日期/时间类型的列(例如 created_at )来操作和过滤数据。 任务 使用示例 按特定日期过滤 SELECT * FROM users WHERE created_at >= '2025-01-01'; 提取日期片段(例如:年份) SELECT EXTRACT(YEAR FROM created_at) AS rok, COUNT(*) FROM users GROUP BY rok; 按完整日期分组 SELECT DATE(created_at) AS dzien, COUNT(*) FROM users GROUP BY dzien; 阶段 5:连接表 (JOIN) 目标: 理解如何从多个表中连接数据,这是在 SQL 中创建复杂报告的关键技能。 你的 users 表是一个,但想象一下你有一个包含 order_id 和 user_id 列的第二个表 orders 。要查看哪个用户下了什么订单,你需要将它们连接起来。 SELECT u.first_name, u.email, o.order_id FROM users AS u JOIN orders AS o ON u.id = o.user_id; 解释: JOIN 语句用于连接表,而 ON 条件指定了它们关联的位置(在本例中是通过用户 ID)。 阶段 6:高级主题(发展方向) 目标: 熟悉先进的概念,这些概念开启了新的分析可能性,并能够编写更清晰、更高效的代码。 主题 说明和使用示例 窗口函数 (Window Functions) 它们允许在数据子集上进行计算,而无需像 GROUP BY 那样“折叠”行。 示例: 根据加入日期为每个国家/地区的用户排名。 CTE (Common Table Expressions) 用于通过使用关键字 WITH 创建临时、命名的结果来组织复杂的查询。 示例: WITH PolscyUzytkownicy AS (SELECT * FROM users WHERE country = 'Poland') SELECT AVG(age) FROM PolscyUzytkownicy; 地理数据 (GEOGRAPHY) 列 user_geom 允许进行空间查询。 示例: “查找距离给定点 5 公里范围内的所有用户”(需要像 ST_Distance 这样的特殊函数)。