京公网安备 11010802034615号
经营许可证编号:京B2-20210330
在 CDA(Certified Data Analyst)数据分析师的技能工具箱中,数据查询语言(尤其是 SQL)是最基础、也最核心的 “武器”。无论是从千万级订单表中提取目标数据,还是从多表关联中整合用户消费信息,抑或是通过聚合分析计算核心业务指标,都离不开数据查询语言的支撑。对 CDA 分析师而言,SQL 不仅是 “获取数据的工具”,更是 “打通数据与业务分析” 的关键链路 —— 熟练掌握 SQL,能让分析师摆脱对 “技术部门取数” 的依赖,实现 “需求到数据” 的快速响应,是从 “被动接收数据” 转向 “主动掌控分析” 的必备能力。
数据查询语言(Data Query Language,DQL)是用于从数据库中检索、筛选、整合数据的编程语言,其中SQL(结构化查询语言,Structured Query Language) 是行业通用标准,覆盖 90% 以上的企业级数据库(MySQL、Hive、PostgreSQL 等)。对 CDA 分析师而言,无需掌握 SQL 的全部模块,只需聚焦 “与数据查询、处理强相关” 的核心功能,即可满足 90% 的分析需求。
SQL 按功能可分为 DQL(数据查询)、DML(数据操纵)、DDL(数据定义)、DCL(数据控制)四大类,其中 CDA 分析师的工作重心集中在DQL(核心) 与DML(辅助):
| 模块类型 | 核心功能 | CDA 分析师常用操作 | 应用场景 |
|---|---|---|---|
| DQL(数据查询) | 从数据库中检索、筛选、聚合数据 | SELECT(查询字段)、WHERE(条件筛选)、GROUP BY(分组)、JOIN(多表关联)、ORDER BY(排序)、LIMIT(分页) | 数据提取、多维度分析、指标计算(如 “提取 2024 年 9 月北京地区订单数据”) |
| DML(数据操纵) | 插入、更新、删除数据,辅助数据处理 | INSERT(插入数据)、UPDATE(更新数据)、DELETE(删除数据)、COALESCE(填充缺失值) | 数据清洗(如 “更新异常订单金额”)、中间表数据写入(如 “将清洗后的数据插入中间表”) |
| DDL(数据定义) | 创建、修改、删除表 / 视图 | CREATE TABLE(建表)、CREATE VIEW(建视图) | 基础数据载体搭建(如 “创建订单清洗中间表”),需结合业务需求设计 |
| DCL(数据控制) | 权限管理(授权、回收权限) | GRANT(授权)、REVOKE(回收权限) | 数据安全管控(如 “给业务部门授予视图查询权限”),通常由数据库管理员操作,CDA 分析师了解即可 |
CDA 分析师的 “需求理解→数据获取→数据清洗→分析建模→结论输出” 全流程,都与 SQL 紧密绑定:
数据获取阶段:用 SQL 从原始数据库中精准提取所需数据,避免 “拿到冗余数据后再筛选” 的低效操作;
数据清洗阶段:用 SQL 过滤异常值(WHERE order_amount>0)、填充缺失值(COALESCE(age,30))、去重(DISTINCT),减少后续工具(如 Python)的处理压力;
分析建模阶段:用 SQL 完成多表关联(JOIN)、聚合计算(SUM/AVG),生成建模所需的 “宽表”(如 “用户 - 订单 - 商品关联表”);
结论输出阶段:用 SQL 提取最终分析结果(如 “各渠道用户消费 Top10”),直接用于可视化报告(Tableau/Power BI)。
CDA 分析师的 SQL 能力无需追求 “炫技”,但需扎实掌握 “能解决业务问题” 的核心操作。以下按 “难度梯度” 拆解高频操作,每个操作均配套实战案例,贴合电商、金融等真实业务场景。
基础查询是 SQL 的 “入门操作”,核心是用SELECT语句从指定表中提取字段,搭配WHERE筛选行、ORDER BY排序、LIMIT分页,满足 “定向取数” 需求。
-- 基础查询模板
SELECT 字段1, 字段2, ... -- 需提取的字段(*表示所有字段,不推荐)
FROM 表名 -- 数据来源表
WHERE 筛选条件 -- 筛选符合条件的行(如时间范围、数值范围)
ORDER BY 字段 [ASC/DESC] -- 按指定字段排序(ASC升序,DESC降序,默认ASC)
LIMIT 起始位置, 条数; -- 分页(起始位置从0开始,条数为返回行数)
需求:提取 “2024 年 9 月北京地区女装品类的订单数据”,包含订单 ID、用户 ID、订单金额、下单时间,按订单金额降序排列,取前 100 条。
SQL 语句:
SELECT
order_id AS 订单ID, -- 字段别名,便于理解
user_id AS 用户ID,
order_amount AS 订单金额,
order_time AS 下单时间
FROM
order_original -- 原始订单表
WHERE
DATE_FORMAT(order_time, '%Y-%m') = '2024-09' -- 筛选9月数据
AND region = '北京' -- 筛选北京地区
AND product_category = '女装' -- 筛选女装品类
AND order_amount > 0 -- 过滤异常订单(金额≤0)
ORDER BY
order_amount DESC -- 按订单金额降序
LIMIT 0, 100; -- 取前100条
聚合与分组是 CDA 分析师 “从数据到指标” 的关键操作,通过GROUP BY按维度分组,搭配COUNT/SUM/AVG等聚合函数计算指标,满足 “多维度分析” 需求。
-- 聚合分组模板
SELECT
分组字段1, 分组字段2, ..., -- 按哪些维度分组(如渠道、地域)
COUNT(字段) AS 计数指标, -- 计数(如用户数、订单数)
SUM(字段) AS 求和指标, -- 求和(如总金额、总销量)
AVG(字段) AS 均值指标 -- 均值(如平均客单价、平均时长)
FROM 表名
WHERE 筛选条件 -- 分组前筛选行
GROUP BY 分组字段1, 分组字段2 -- 分组字段需与SELECT中非聚合字段一致
HAVING 聚合筛选条件 -- 分组后筛选(如“总金额>100万”)
ORDER BY 聚合指标 DESC; -- 按聚合指标排序
需求:统计 “2024 年 Q3 各信贷渠道的放款情况”,包含渠道名称、放款用户数、总放款金额、平均放款金额,仅保留 “总放款金额 > 500 万” 的渠道,按总金额降序排列。
SQL 语句:
SELECT
channel_name AS 信贷渠道,
COUNT(DISTINCT user_id) AS 放款用户数, -- 去重统计用户数(避免同一用户多次放款)
SUM(loan_amount) AS 总放款金额,
ROUND(AVG(loan_amount), 2) AS 平均放款金额 -- ROUND保留2位小数
FROM
loan_original -- 信贷放款原始表
WHERE
loan_time BETWEEN '2024-07-01' AND '2024-09-30' -- 筛选Q3数据
AND loan_status = '已放款' -- 筛选已放款订单
GROUP BY
channel_name
HAVING
SUM(loan_amount) > 5000000 -- 仅保留总放款金额>500万的渠道
ORDER BY
总放款金额 DESC;
企业数据通常分散在多个表中(如用户表、订单表、商品表),多表关联是 CDA 分析师 “整合数据” 的核心能力,通过JOIN语句按关联字段(如user_id)连接多表,形成 “分析宽表”。
| 关联类型 | 语法 | 逻辑含义 | 适用场景 |
|---|---|---|---|
| 内连接(INNER JOIN) | FROM 表 A INNER JOIN 表 B ON 表 A. 关联字段 = 表 B. 关联字段 | 仅保留两表中 “关联字段匹配” 的行 | 需同时存在两表数据的场景(如 “有订单的用户”) |
| 左连接(LEFT JOIN) | FROM 表 A LEFT JOIN 表 B ON 表 A. 关联字段 = 表 B. 关联字段 | 保留表 A 所有行,表 B 中无匹配的行填充 NULL | 需保留主表所有数据的场景(如 “所有用户的订单情况,无订单用户显示 NULL”) |
需求:整合 “用户表” 与 “订单表”,分析 “2024 年 9 月各地区用户的消费情况”,包含地区、用户数、总消费金额、平均消费金额。
SQL 语句:
SELECT
u.region AS 地区,
COUNT(DISTINCT u.user_id) AS 用户数, -- 统计该地区有消费的用户数
SUM(o.order_amount) AS 总消费金额,
ROUND(AVG(o.order_amount), 2) AS 平均消费金额
FROM
user_table u -- 用户表(主表,用LEFT JOIN保留所有地区)
LEFT JOIN
order_original o -- 订单表
ON
u.user_id = o.user_id -- 按user_id关联两表
WHERE
DATE_FORMAT(o.order_time, '%Y-%m') = '2024-09' -- 筛选9月订单
AND o.order_amount > 0 -- 过滤异常订单
GROUP BY
u.region
ORDER BY
总消费金额 DESC;
当基础操作无法满足需求时(如 “排名 Top10”“累计求和”),需用到子查询或窗口函数,这是 CDA 分析师从 “基础取数” 迈向 “深度分析” 的关键。
实战案例:提取 “2024 年 9 月消费金额 Top10 的用户信息”,包含用户 ID、用户名、总消费金额。
SQL 语句:
-- 子查询:先计算每个用户9月总消费,再取Top10
SELECT
u.user_id AS 用户ID,
u.user_name AS 用户名,
sub.total_consume AS 总消费金额
FROM
user_table u
INNER JOIN (
-- 子查询:计算每个用户9月总消费
SELECT
user_id,
SUM(order_amount) AS total_consume
FROM
order_original
WHERE
DATE_FORMAT(order_time, '%Y-%m') = '2024-09'
GROUP BY
user_id
) sub ON u.user_id = sub.user_id
ORDER BY
sub.total_consume DESC
LIMIT 0, 10;
窗口函数(如ROW_NUMBER、RANK、SUM() OVER())可在 “不改变行数” 的前提下,对分组内的数据进行排名、累计计算,常用于 “按维度排名”“同期比” 等场景。
实战案例:按 “商品品类” 对 2024 年 9 月订单金额排名,每个品类取 Top3 的订单,包含品类、订单 ID、订单金额、品类内排名。
SQL 语句:
SELECT
product_category AS 商品品类,
order_id AS 订单ID,
order_amount AS 订单金额,
-- 窗口函数:按品类分组,按订单金额降序排名
ROW_NUMBER() OVER (PARTITION BY product_category ORDER BY order_amount DESC) AS 品类内排名
FROM
order_original
WHERE
DATE_FORMAT(order_time, '%Y-%m') = '2024-09'
HAVING
品类内排名 <= 3; -- 仅保留每个品类Top3的订单
以 “电商平台 2024 年 Q3 新用户消费分析” 为例,完整展现 SQL 在 CDA 工作流中的应用:
业务需求:分析 “2024 年 Q3(7-9 月)新注册用户的消费行为”,需回答:
新用户首单转化率(注册后 7 天内下单的用户占比);
各注册渠道新用户的平均首单金额;
高价值新用户(首单金额 > 500 元)的地域分布。
CREATE TEMP TABLE q3_new_users AS -- 创建临时表存储新用户数据
SELECT
user_id,
user_name,
region,
register_time,
register_channel
FROM
user_table
WHERE
register_time BETWEEN '2024-07-01' AND '2024-09-30'
AND register_time IS NOT NULL;
CREATE TEMP TABLE q3_new_user_first_order AS
SELECT
user_id,
order_id,
order_amount AS first_order_amount,
order_time AS first_order_time,
-- 计算首单与注册的间隔天数
DATEDIFF(order_time, u.register_time) AS days_from_register
FROM
order_original o
INNER JOIN q3_new_users u ON o.user_id = u.user_id
WHERE
-- 筛选首单(同一用户最早的订单)
(o.user_id, o.order_time) IN (
SELECT user_id, MIN(order_time)
FROM order_original
GROUP BY user_id
);
SELECT
COUNT(DISTINCT u.user_id) AS 新用户总数,
COUNT(DISTINCT o.user_id) AS 7天内首单用户数,
ROUND(COUNT(DISTINCT o.user_id)/COUNT(DISTINCT u.user_id), 4)*100 AS 首单转化率
FROM
q3_new_users u
LEFT JOIN q3_new_user_first_order o
ON u.user_id = o.user_id
AND o.days_from_register <= 7; -- 仅保留注册后7天内的首单
SELECT
u.register_channel AS 注册渠道,
COUNT(DISTINCT u.user_id) AS 渠道新用户数,
ROUND(AVG(o.first_order_amount), 2) AS 平均首单金额
FROM
q3_new_users u
LEFT JOIN q3_new_user_first_order o ON u.user_id = o.user_id
GROUP BY
u.register_channel
ORDER BY
平均首单金额 DESC;
SELECT
u.region AS 地域,
COUNT(DISTINCT u.user_id) AS 高价值新用户数,
ROUND(SUM(o.first_order_amount), 2) AS 高价值用户总消费
FROM
q3_new_users u
INNER JOIN q3_new_user_first_order o
ON u.user_id = o.user_id
AND o.first_order_amount > 500 -- 首单金额>500元
GROUP BY
u.region
ORDER BY
高价值新用户数 DESC;
将上述分析结果用SELECT语句提取,直接导入 Tableau 制作可视化报告,或导出为 Excel 供业务部门查看:
-- 导出高价值新用户地域分布结果
SELECT
u.region AS 地域,
COUNT(DISTINCT u.user_id) AS 高价值新用户数,
ROUND(SUM(o.first_order_amount), 2) AS 高价值用户总消费
FROM
q3_new_users u
INNER JOIN q3_new_user_first_order o
ON u.user_id = o.user_id
AND o.first_order_amount > 500
GROUP BY
u.region
ORDER BY
高价值新用户数 DESC
INTO OUTFILE '/data/q3_high_value_user_region.csv' -- 导出为CSV文件
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n';
当数据量达到百万级、千万级时,低效 SQL 可能耗时数分钟甚至小时,CDA 分析师需掌握基础优化技巧:
避免使用SELECT *:仅查询需要的字段(如SELECT order_id, user_id而非SELECT *),减少数据传输量;
合理使用索引:在WHERE筛选字段、JOIN关联字段、GROUP BY分组字段上建立索引(如 “订单表” 的order_time“user_id” 字段),但避免过度建索引(索引会增加数据插入 / 更新时间);
减少JOIN表数量:仅关联必要的表(如分析 “用户消费” 时,若无需商品信息,则不关联商品表);
用LIMIT限制返回行数:避免一次性加载大量数据(如 “取前 100 条数据测试” 而非全表查询);
替换IN为JOIN:当子查询数据量大时,IN效率低,可替换为JOIN(如SELECT * FROM A WHERE user_id IN (SELECT user_id FROM B)改为SELECT A.* FROM A JOIN B ON A.user_id=B.user_id)。
进阶语法学习:掌握窗口函数(LAG/LEAD用于同期比、SUM() OVER()用于累计求和)、CTE(WITH语句,简化复杂子查询)、动态 SQL(适配灵活筛选条件);
多数据库适配:除 MySQL 外,学习 Hive SQL(大数据量分析)、PostgreSQL(复杂函数支持),应对不同数据存储场景(如 Hive 处理 PB 级日志数据);
工具联动:将 SQL 与分析工具结合,提升效率:
用 Python 的pymysql/sqlalchemy库自动执行 SQL 取数,实现 “取数 - 分析 - 可视化” 自动化;
用 Tableau/Power BI 直接连接数据库,通过 SQL 自定义查询获取数据,避免手动导入导出;
对 CDA 数据分析师而言,SQL 并非 “一次性学习的技术”,而是 “伴随职业生涯持续深化的能力”。从基础的SELECT取数,到复杂的窗口函数分析,再到大数据量查询优化,SQL 能力的每一步提升,都对应着分析效率与深度的突破。
在数据驱动的时代,企业需要的不是 “会写 SQL 的人”,而是 “能用 SQL 解决业务问题的 CDA 分析师”—— 他们能通过 SQL 精准提取数据,通过聚合与关联生成指标,通过优化提升效率,最终让数据真正成为 “支撑决策、驱动增长” 的核心力量。对 CDA 分析师而言,扎实的 SQL 功底,既是入门的 “敲门砖”,也是进阶为高级分析师、数据科学家的 “基石”。

数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据统计分析、数据清洗、异常值识别与数据分布研究中,箱型图是最直观、高效、专业的可视化分析工具。相较于柱状图、折线图仅 ...
2026-05-29Tkinter是Python内置的标准GUI图形界面库,具备无需额外安装、调用简单、兼容性强、轻量化高效等优势,是Python快速开发桌面小程 ...
2026-05-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-05-29【核心关键词】大数据、经理、专业、金融、客户、传统、建模、数据产品、互联网金融、产品经理、数据分析、金融行业、数据模型 ...
2026-05-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-05-28随着大数据技术的快速普及,各行各业积累了海量的用户数据、交易数据、生产数据与行为数据。单纯的数据统计与报表分析只能呈现表 ...
2026-05-28在Python网络请求、接口测试、数据爬取、业务对接开发中,Requests库是最简洁、最高效的HTTP请求工具,凭借简洁的语法、完善的适 ...
2026-05-272025 年,零售与服务行业的竞争已从 “经验驱动” 全面转向 “数据驱动”。中小企业门店普遍面临数据零散、分析浅层、决策凭感觉 ...
2026-05-27 很多数据分析师每天都在写SQL,但当被问到“数据查询语言(DQL)的本质是什么”“SELECT语句中各子句的书写顺序与实际执行顺 ...
2026-05-27在统计学分析、实验研究、业务数据复盘过程中,单因素方差分析是检验自变量对因变量是否存在显著影响的核心方法。其中,两个水平 ...
2026-05-26【核心关键词】算法、客户、大数据、互联网、调优、建模、模型优化、机器学习、评分卡模型、模型开发、智能风控、业务场景、数 ...
2026-05-26 很多数据分析师写过无数个 SELECT,但当被问到“新建一张表,该如何定义字段类型来保证数据质量”“创建视图和存储物理表有 ...
2026-05-26在数据清洗、统计分析与数据质量检测工作中,箱型图(又称箱线图、Box Plot)是最直观、最高效的可视化分析工具之一。相较于柱状 ...
2026-05-25在大数据分析、数据清洗、质量管控、风险监测等领域,异常数据识别是保障数据质量、确保分析结论精准、规避业务决策失误的核心基 ...
2026-05-25 很多数据分析师精通Excel函数和透视表,但当被问到“数据从哪里来”“表和视图有什么区别”“数据库管理系统和SQL是什么关系 ...
2026-05-25数字化经营时代,企业的市场竞争早已从经验决策转向数据决策。门店营收、用户转化、产品销量、成本损耗、存量资产等所有经营行为 ...
2026-05-22在MySQL数据库日常运维、业务数据校验、数据迁移与数据清洗场景中,自增主键ID的连续性校验是一项基础且关键的工作。MySQL的Auto ...
2026-05-22 很多企业团队并非缺乏指标,而是陷入“指标失控”:仪表盘上堆满实时跳动的数据,却无法回答“当前瓶颈在哪、下一步该做什么 ...
2026-05-22【核心关键词】大数据、可视化、存储、架构、客户、离线、产品、同步、实时、数据仓库、数据分析、数据可视化、存储数据、离线 ...
2026-05-21在电商流量红利消退、公域获客成本持续走高的当下,存量用户深度挖掘已成为店铺增收增效的核心抓手。相较于付费投放获取的陌生新 ...
2026-05-21