SQL数据分析从小白到高手
书中结合案例讲解数据清洗、建模、可视化等技能,兼顾理论深度与实操性,帮助读者构建系统化知识框架。同时,内容紧跟行业趋势,涵盖大数据分析、商业智能、ChatGPT与DeepSeek等前沿领域,还配套练习与项目实战,助力读者将知识转化为职场竞争力,是数据分析师从入门到进阶的实用参考资料。
目录
5. AI工具与SQL协同:ChatGPT与DeepSeek实战
7. 数据可视化:SQL与Tableau/Power BI集成
10. 附录:资源推荐与常见问题解答
1. 引言:AI时代的SQL数据分析变革
1.1 数据分析与SQL的核心地位
在数据驱动决策的时代,SQL(结构化查询语言)仍是数据分析师的核心工具。据LinkedIn 2025年报告,SQL位列数据岗位技能需求榜首,掌握SQL的分析师薪资较同龄人高出32%。无论是电商平台的用户行为分析、金融机构的风控建模,还是医疗系统的病案统计,SQL都是提取数据洞察的基础设施。
1.2 AI如何重塑SQL数据分析
2025年,ChatGPT o3、DeepSeek R1等大模型已成为SQL分析师的智能助手。典型案例显示,ChatGPT可将470行“低效SQL”优化至7秒执行(原始查询需1039秒),并自动识别脏数据;DeepSeek则擅长生成复杂表结构(如微博评论系统表设计)和调试JSON字段解析。AI工具不仅提升效率,更将分析师从“写SQL”解放至“解读业务”。

1.3 本书核心价值与学习路径
本书采用“理论-工具-实战”三位一体架构:
• 基础层:从SQL语法到高级查询;
• 工具层:详解ChatGPT/DeepSeek的提示词工程、SQL生成与优化;
• 实战层:4个行业项目(电商/金融/医疗/物联网),覆盖数据清洗、多表关联、实时分析。
适合读者:零基础入门者、需要提升AI技能的在职分析师、准备面试的数据岗位求职者。
2. SQL基础:从语法到数据查询
2.1 SQL语法入门
2.1.1 数据类型与表结构
SQL支持多种数据类型,核心包括:
• 数值型:INT(整数)、DECIMAL(10,2)(小数,如价格);
• 字符串型:VARCHAR(50)(可变长度文本,如用户名)、TEXT(长文本,如商品描述);
• 日期型:DATE(日期)、DATETIME(日期时间,如订单时间戳)。
示例:创建电商订单表
// sql
CREATE TABLE orders (
order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID',
user_id VARCHAR(18) NOT NULL COMMENT '用户ID',
order_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
order_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间',
status TINYINT NOT NULL COMMENT '状态(0-取消,1-完成)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.1.2 基本查询:SELECT与WHERE
语法:SELECT 列名 FROM 表名 WHERE 条件;
示例:查询2025年6月金额>1000元的订单
// sql
SELECT order_id, user_id, order_amount
FROM orders
WHERE order_time BETWEEN '2025-06-01' AND '2025-06-30'
AND order_amount > 1000
ORDER BY order_amount DESC;
2.2 数据操纵:INSERT、UPDATE与DELETE
2.2.1 插入数据
// sql
INSERT INTO orders (user_id, order_amount, status)
VALUES ('123456789', 1599.99, 1);
2.2.2 更新与删除(谨慎操作!)
// sql
-- 更新订单状态
UPDATE orders SET status=0 WHERE order_id=10086;
-- 删除测试数据(生产环境禁用!)
DELETE FROM orders WHERE user_id='test_user';
2.3 练习:基础查询与数据操纵
题目:从products表中查询“电子产品”类目下价格>5000元的商品,按销量降序取前10名。
提示:使用WHERE category='电子产品'和LIMIT 10。
答案:
// sql
SELECT product_id, product_name, price, sales
FROM products
WHERE category='电子产品' AND price>5000
ORDER BY sales DESC
LIMIT 10;
3. SQL进阶:复杂查询与性能优化
3.1 多表关联:JOIN与子查询
3.1.1 INNER JOIN与LEFT JOIN
场景:关联订单表(orders)与用户表(users),查询用户姓名及订单金额。
// sql
-- 内连接:仅返回匹配的用户和订单
SELECT o.order_id, u.user_name, o.order_amount
FROM orders o
INNER JOIN users u ON o.user_id = u.user_id;
-- 左连接:返回所有订单,无匹配用户则姓名为NULL
SELECT o.order_id, u.user_name, o.order_amount
FROM orders o
LEFT JOIN users u ON o.user_id = u.user_id;
3.1.2 子查询:嵌套与关联子查询
场景:查询购买过“智能手机”的用户ID。
// sql
-- 嵌套子查询
SELECT DISTINCT user_id
FROM orders
WHERE product_id IN (
SELECT product_id FROM products WHERE product_name='智能手机'
);
-- 关联子查询(逐行执行,适合复杂条件)
SELECT o.order_id, o.user_id
FROM orders o
WHERE EXISTS (
SELECT 1 FROM products p
WHERE p.product_id = o.product_id
AND p.category='电子产品'
);
3.2 窗口函数:排名与累计分析
窗口函数是高级分析核心,用于“分组统计但不合并行”。
3.2.1 常用窗口函数
• ROW_NUMBER():无重复排名(1,2,3);
• RANK():有重复排名(1,2,2,4);
• SUM() OVER (PARTITION BY ... ORDER BY ...):分组累计求和。
示例:按类目排名商品销量
// sql
SELECT
product_id,
category,
sales,
RANK() OVER (PARTITION BY category ORDER BY sales DESC) AS sales_rank
FROM products;
3.2.2 实战:用户留存率计算
// sql
WITH user_active AS (
SELECT
user_id,
DATE_FORMAT(order_time, '%Y-%m') AS month
FROM orders
GROUP BY user_id, month
)
SELECT
current.month,
COUNT(DISTINCT current.user_id) AS current_users,
COUNT(DISTINCT prev.user_id) AS retained_users,
ROUND(COUNT(DISTINCT prev.user_id)/COUNT(DISTINCT current.user_id), 2) AS retention_rate
FROM user_active current
LEFT JOIN user_active prev
ON current.user_id = prev.user_id
AND current.month = DATE_FORMAT(DATE_ADD(prev.month, INTERVAL 1 MONTH), '%Y-%m')
GROUP BY current.month;
3.3 性能优化:索引与AI工具
3.3.1 索引设计原则
• 单列索引:频繁过滤字段(如user_id、order_time);
• 联合索引:遵循“最左前缀匹配”,如(category, sales);
• 避免过度索引:更新频繁的表(如订单表)索引不超过5个。
示例:为订单表添加联合索引
// sql
CREATE INDEX idx_user_time ON orders(user_id, order_time) INCLUDE (order_amount);
3.3.2 AI工具辅助优化
2025年主流工具对比:
|
工具 |
优势 |
局限 |
|
ChatGPT o3 |
复杂查询优化、脏数据识别 |
简单查询可能过度优化 |
|
DeepSeek R1 |
表结构生成、JSON解析 |
部分场景报错(如复杂子查询) |
|
Grok 3 |
稳定性强,适合生产环境 |
优化幅度中等 |
提示词模板:
优化以下SQL,目标执行时间<100秒,需保留所有字段且结果一致:
[粘贴SQL代码]
数据库表结构:
- orders: user_id(INT), order_time(DATETIME), order_amount(DECIMAL)
- 索引:现有idx_user_id(user_id)
3.4 练习:窗口函数与性能优化
题目:计算每个用户的首单金额与首单后30天复购率。
提示:使用FIRST_VALUE()窗口函数和日期差计算。
答案:
// sql
WITH user_first_order AS (
SELECT
user_id,
MIN(order_time) AS first_order_time,
FIRST_VALUE(order_amount) OVER (PARTITION BY user_id ORDER BY order_time) AS first_amount
FROM orders
GROUP BY user_id
)
SELECT
u.user_id,
u.first_amount,
COUNT(DISTINCT o.order_id) > 1 AS has_repurchase
FROM user_first_order u
LEFT JOIN orders o
ON u.user_id = o.user_id
AND o.order_time BETWEEN u.first_order_time AND DATE_ADD(u.first_order_time, INTERVAL 30 DAY)
GROUP BY u.user_id, u.first_amount;
4. 数据分析思维:从业务问题到数据指标
4.1 业务理解与指标设计
4.1.1 电商核心指标体系
|
维度 |
指标 |
定义 |
SQL实现示例 |
|
流量 |
UV(独立访客) |
去重用户数 |
COUNT(DISTINCT user_id) |
|
转化 |
下单转化率 |
下单用户数/访问用户数 |
SUM(CASE WHEN order_id IS NOT NULL THEN 1 ELSE 0 END)/COUNT(DISTINCT user_id) |
|
留存 |
7日留存率 |
第1天活跃用户在第7天仍活跃的比例 |
见3.2.2节留存率SQL |
|
营收 |
GMV(成交总额) |
订单金额总和 |
SUM(order_amount) |
4.1.2 指标口径统一
反例:不同部门对“活跃用户”定义不一致(A部门按登录,B部门按下单),导致数据打架。
解决方案:建立数据字典,明确指标计算逻辑,如:
活跃用户(日):当日有下单行为或浏览时长>5分钟的用户ID
4.2 数据清洗:处理缺失值与异常值
4.2.1 缺失值处理
// sql
-- 删除关键字段缺失行(如订单金额为空)
DELETE FROM orders WHERE order_amount IS NULL;
-- 填充缺失值(如用均值填充评分)
UPDATE products
SET rating = (SELECT AVG(rating) FROM products)
WHERE rating IS NULL;
4.2.2 异常值识别与过滤
场景:过滤订单金额>10万元的异常数据(假设正常订单<5万元)
// sql
DELETE FROM orders
WHERE order_amount > 100000
AND order_id NOT IN (SELECT order_id FROM high_value_orders); -- 排除已知大额订单
4.3 练习:指标设计与数据清洗
题目:设计“用户购买频次”指标,需区分新老用户,并清洗下单时间早于注册时间的异常订单。
步骤:
1. 定义新用户:首单时间距注册时间≤30天;
2. 清洗异常订单:WHERE order_time >= register_time;
3. 计算频次:COUNT(order_id)按用户分组。
5. AI工具与SQL协同:ChatGPT与DeepSeek实战
5.1 ChatGPT:SQL生成与调试
5.1.1 基础SQL生成
提示词:
生成MySQL代码:创建“学生成绩表”,包含id(主键)、student_id(唯一)、name、score(保留1位小数)、create_time(默认当前时间)。
ChatGPT输出:
// sql
CREATE TABLE student_scores (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id VARCHAR(18) NOT NULL UNIQUE COMMENT '学号',
name VARCHAR(50) NOT NULL COMMENT '姓名',
score DECIMAL(5,1) NOT NULL COMMENT '成绩',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
5.1.2 复杂查询优化
案例:将1039秒的订单查询优化至7秒(ChatGPT o3)
优化逻辑:
1. 替换SELECT *为具体字段,减少IO;
2. 添加复合索引:idx_user_time (user_id, order_time);
3. 拆分大表:将历史订单归档至分区表。
5.2 DeepSeek R1:高级功能与行业适配
5.2.1 JSON字段处理
场景:解析API日志表中的JSON格式body字段,提取用户ID
// sql
-- DeepSeek生成的SQL
SELECT
JSON_EXTRACT_PATH_TEXT(body, 'params', 'userId') AS user_id,
created_at
FROM api_logs
WHERE uri = '/api/login';
5.2.2 医疗数据合规处理
场景:按HIPAA要求脱敏患者手机号(保留后4位)
// sql
-- DeepSeek生成的SQL
SELECT
patient_id,
CONCAT('****', SUBSTRING(phone, 9, 4)) AS masked_phone
FROM medical_records;
5.3 提示词工程:精准控制AI输出
5.3.1 结构化提示词模板
任务:生成SQL查询
表结构:
- orders: order_id(INT), user_id(INT), order_time(DATETIME), amount(DECIMAL)
- products: product_id(INT), name(VARCHAR), category(VARCHAR)
需求:统计2025年Q1每个类目的销售额,按降序排列。
输出要求:仅返回SQL代码,无解释。
5.3.2 常见错误与避坑
• 问题:AI生成SQL遗漏GROUP BY导致语法错误;
• 解决:提示词中明确“需分组字段”;
• 问题:复杂逻辑生成错误(如窗口函数参数错误);
• 解决:分步骤提问,先让AI生成基础查询,再逐步添加高级功能。
5.4 练习:AI辅助分析实战
任务:使用ChatGPT分析“2025年Q1电商复购率下降20%”的原因,输出SQL查询与结论。
步骤:
1. 让ChatGPT列出可能原因(如新用户占比上升、品类结构变化);
2. 生成对应SQL(如按用户类型分组计算复购率);
3. 根据结果让AI解读(如“新用户复购率仅5%,拉低整体指标”)。
6. 实战项目:电商用户行为全流程分析
6.1 项目背景与数据准备
数据集:2025年1月-3月电商平台数据(用户表、订单表、商品表、行为日志表),共500万行。
工具:MySQL 8.0、ChatGPT o3、Tableau
分析目标:识别用户流失节点,提出运营优化建议。
6.2 数据清洗与预处理
6.2.1 处理重复订单
// sql
DELETE FROM orders
WHERE (user_id, order_time) IN (
SELECT user_id, order_time
FROM (
SELECT
user_id,
order_time,
ROW_NUMBER() OVER (PARTITION BY user_id, order_time ORDER BY order_id) AS rn
FROM orders
) t
WHERE rn > 1
);
6.2.2 行为日志表结构调整
// sql
ALTER TABLE user_behavior
ADD COLUMN hour INT GENERATED ALWAYS AS (HOUR(behavior_time)) STORED; -- 提取小时维度
6.3 多维度分析与洞察
6.3.1 用户行为路径分析
// sql
WITH funnel AS (
SELECT
COUNT(DISTINCT CASE WHEN behavior_type='pv' THEN user_id END) AS pv_users,
COUNT(DISTINCT CASE WHEN behavior_type='cart' THEN user_id END) AS cart_users,
COUNT(DISTINCT CASE WHEN behavior_type='buy' THEN user_id END) AS buy_users
FROM user_behavior
WHERE behavior_time >= '2025-01-01'
)
SELECT
cart_users / pv_users AS pv_to_cart,
buy_users / cart_users AS cart_to_buy
FROM funnel;
结论:加购转购买率仅12%,需优化商品详情页与支付流程。
6.3.2 高价值用户识别(RFM模型)
// sql
WITH rfm AS (
SELECT
user_id,
DATEDIFF(NOW(), MAX(order_time)) AS recency, -- 最近购买间隔
COUNT(DISTINCT order_id) AS frequency, -- 购买频次
SUM(order_amount) AS monetary -- 消费金额
FROM orders
GROUP BY user_id
)
SELECT
user_id,
CASE
WHEN recency < 30 AND frequency >= 5 AND monetary >= 5000 THEN '高价值用户'
WHEN recency < 60 AND frequency >= 2 THEN '潜力用户'
ELSE '流失风险用户'
END AS user_level
FROM rfm;
6.4 项目总结与优化建议
1. 产品端:优化“电子产品”类目加购按钮位置,A/B测试显示可提升加购率15%;
2. 运营端:对“流失风险用户”发送满减券,历史数据显示核销率达28%;
3. 技术端:使用DeepSeek生成实时监控SQL,异常订单(如金额>10万)实时告警。
7. 数据可视化:SQL与Tableau/Power BI集成
7.1 Tableau与SQL协同流程
7.1.1 连接数据库与自定义SQL
1. 在Tableau中选择“MySQL”数据源,输入服务器地址与认证信息;
2. 使用自定义SQL筛选数据:
// sql
SELECT
DATE_FORMAT(order_time, '%Y-%m-%d') AS order_date,
category,
SUM(order_amount) AS total_sales
FROM orders o
JOIN products p ON o.product_id = p.product_id
GROUP BY order_date, category;
7.1.2 创建交互式仪表板
步骤:
• 将“orderdate”拖至列,“totalsales”拖至行,生成折线图;
• 添加“category”筛选器,实现按类目下钻;
• 设置“订单金额>10万”的条件格式,突出异常数据。
7.2 Power BI中的SQL高级应用
7.2.1 动态M查询参数
场景:通过切片器动态筛选日期范围
// powerquery-m
let
Source = Sql.Database("localhost", "ecommerce", [Query="SELECT * FROM orders WHERE order_time BETWEEN '" & Date.ToText(StartDate) & "' AND '" & Date.ToText(EndDate) & "'"])
in
Source
7.2.2 AI可视化(Power BI Copilot)
输入自然语言“显示各品类销售额占比”,Copilot自动生成饼图,并支持一键调整颜色与标签。
7.3 练习:实时销售监控看板
任务:使用SQL+Tableau构建实时看板,包含:
• 当日销售额(每小时更新);
• Top 5热销商品;
• 区域销售热力图。
提示:SQL使用DATE_FORMAT(NOW(), '%H')提取当前小时,Tableau设置数据提取每小时刷新。
8. 行业拓展:金融、医疗与物联网SQL应用
8.1 金融风控:信贷逾期预测
场景:识别高逾期风险用户,基于历史还款数据构建SQL特征工程
// sql
-- 提取用户还款特征
SELECT
user_id,
COUNT(CASE WHEN repayment_status='逾期' THEN 1 END)/COUNT(*) AS overdue_rate,
AVG(DATEDIFF(repayment_date, due_date)) AS avg_delay_days
FROM loan_repayments
GROUP BY user_id;
8.2 医疗数据分析:DRGS病组统计
场景:按DRGS(疾病诊断相关分组)统计住院天数
// sql
SELECT
drgs_code,
AVG(DATEDIFF(discharge_date, admission_date)) AS avg_stay_days,
COUNT(CASE WHEN stay_days > 14 THEN 1 END) AS long_stay_count
FROM medical_records
GROUP BY drgs_code;
8.3 物联网(IoT):设备状态监控
场景:实时监测智能电表异常(如电流>20A)
// sql
-- Flink SQL实时查询
SELECT
device_id,
current,
ts
FROM iot_metrics
WHERE current > 20
AND ts >= NOW() - INTERVAL '5' MINUTE;
9. 职场竞争力:面试技巧与2025认证指南
9.1 SQL面试高频题解析
9.1.1 经典面试题:第二高的薪水
问题:查询员工表中第二高的薪水,若不存在则返回NULL。
答案:
// sql
SELECT
IFNULL(
(SELECT DISTINCT salary
FROM employees
ORDER BY salary DESC
LIMIT 1 OFFSET 1),
NULL
) AS second_highest_salary;
9.1.2 场景题:用户连续登录天数
问题:计算用户连续登录的最大天数
// sql
WITH user_login AS (
SELECT
user_id,
login_date,
DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY) AS group_date
FROM logins
)
SELECT
user_id,
MAX(连续天数) AS max_continuous_days
FROM (
SELECT
user_id,
group_date,
COUNT(*) AS 连续天数
FROM user_login
GROUP BY user_id, group_date
) t
GROUP BY user_id;
9.2 2025年SQL认证指南
9.2.1 推荐认证
• MySQL OCP 8.0:Oracle官方认证,2025年7月前免费考取;
• 腾讯云TDSQL认证:聚焦分布式数据库,适合云原生岗位;
• AWS Redshift认证:数据仓库方向,薪资溢价25%。
9.2.2 备考资源
• Coursera:《Database and SQL for Data Science》(IBM出品,含证书);
• 牛客网:SQL高频73题(覆盖90%面试场景);
• 官方文档:MySQL 8.0 Reference Manual(重点掌握窗口函数与JSON函数)。
9.3 简历与项目包装
项目经验STAR法则:
• 情境(S):电商平台用户复购率下降20%;
• 任务(T):通过SQL分析流失原因,提出优化方案;
• 行动(A):使用RFM模型识别高价值用户,设计召回策略;
• 结果(R):复购率提升12%,GMV增长800万元/月。
10. 附录:资源推荐与常见问题解答
10.1 学习资源
• 工具:Beekeeper Studio(开源SQL客户端)、PawSQL(自动化优化工具);
• 数据集:Kaggle电商数据集、天池医疗数据集;
• 社区:Stack Overflow(SQL标签)、知乎“数据分析”话题。
10.2 常见问题(FAQ)
Q1:AI会取代SQL分析师吗?
A1:不会。AI擅长“写SQL”,但分析师的核心价值在于业务解读(如“复购率下降是否因竞品活动”)和策略制定,这需要行业经验与商业嗅觉。
Q2:如何提升SQL查询性能?
A2:优先考虑索引优化(如联合索引),其次使用分区表(按时间拆分大表),最后借助AI工具(如ChatGPT o3)生成优化建议。
Q3:零基础如何快速入门?
A3:前2周掌握基础语法(W3School SQL教程),第3周开始项目实战(推荐电商用户行为分析),每天至少写5条SQL语句。
结语:SQL是数据分析师的“基础设施”,而AI工具是“加速器”。2025年,会用AI的SQL分析师将成为职场稀缺人才。通过本书系统学习,你将具备从“数据提取”到“业务决策”的全流程能力,轻松应对数据分析岗位的挑战与机遇。
《CDA数据分析师技能树系列图书》系统整合数据分析核心知识,从基础工具(如Python、SQL、Excel、Tableau、SPSS等)到机器学习、深度学习算法,再到行业实战(金融、零售等场景)形成完整体系。书中结合案例讲解数据清洗、建模、可视化等技能,兼顾理论深度与实操性,帮助读者构建系统化知识框架。同时,内容紧跟行业趋势,涵盖大数据分析、商业智能、ChatGPT与DeepSeek等前沿领域,还配套练习与项目实战,助力读者将知识转化为职场竞争力,是数据分析师从入门到进阶的实用参考资料。

更多推荐
所有评论(0)