目录

1. 引言:AI时代的SQL数据分析变革

2. SQL基础:从语法到数据查询

3. SQL进阶:复杂查询与性能优化

4. 数据分析思维:从业务问题到数据指标

5. AI工具与SQL协同:ChatGPT与DeepSeek实战

6. 实战项目:电商用户行为全流程分析

7. 数据可视化:SQL与Tableau/Power BI集成

8. 行业拓展:金融、医疗与物联网SQL应用

9. 职场竞争力:面试技巧与2025认证指南

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_idorder_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等前沿领域,还配套练习与项目实战,助力读者将知识转化为职场竞争力,是数据分析师从入门到进阶的实用参考资料。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐