数据分析进阶实战:用 SQL 和统计学,把老板丢来的数据"看透"

写作日期:2026-08-05 | 来源:数据分析学习笔记
关键词:SQL、GROUP BY、窗口函数、数据透视表、统计学

背景(S)

昨天学会了用 Pandas 把数据读进来、洗干净、算出每个产品的总销售额。但老板又丢来一个 10 万行的销售记录,问了我三个问题:

  • “哪个季度销售额最高?”
  • “每个季度里,哪三个产品卖得最好?”
  • “这组数据整体表现怎么样?是稳的还是忽高忽低的?”

第一个问题——Pandas 能解决(groupby + sort_values)。
第二个问题——Pandas 也能解决,但更简单的方式是用 SQL 的窗口函数一行搞定。
第三个问题——得用统计学(均值、标准差)来回答"稳不稳定"。

这三个问题,正好对应我今天学完的三个知识点:SQL 分组聚合SQL 窗口函数统计学基础

踩过的坑(T)

  1. SQL 和 GROUP BY 一起用时,SELECT 里写了不该写的列——忘了 SELECT 只能选分组列和聚合函数,导致报错。
  2. 忘了 HAVING 和 WHERE 的区别——分组后想过滤结果,还在用 WHERE,导致报错。后来才搞懂:WHERE 在分组前执行(不能写聚合函数),HAVING 在分组后执行(可以写聚合函数)
  3. 窗口函数忘了包一层子查询——ROW_NUMBER() 算出排名后,直接在同一个 SELECT 里写 WHERE 排名 <= 3,SQL 不认。必须先子查询包一层,在外层 WHERE 过滤排名。
  4. 相关系数算出来 0.95,就以为是因果关系——后来才理解"相关 ≠ 因果"。比如冰淇淋销量和溺水人数正相关,其实是夏天这个第三变量同时让两者上升,并不是冰淇淋导致溺水。
  5. 算公司平均薪资被高管拉高——10 万月薪的高管让平均值从 5000 直接飙到 20000,老板一眼看出不对劲。后来改用中位数按岗位分组,才得出真实结论。

怎么解决的(A)

知识点 1:SQL 聚合函数与 GROUP BY

每个季度总销售额——和 Pandas groupby 逻辑一模一样,只是语法不同:

PandasSQL
df.groupby('季度')['金额'].sum()SELECT 季度, SUM(金额) FROM 表 GROUP BY 季度
df.groupby('季度')['金额'].mean()SELECT 季度, AVG(金额) FROM 表 GROUP BY 季度

SQL 执行顺序记牢:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

一个完整示例:每个季度总销售额,降序排列:

SELECT 季度, SUM(金额) AS 季度销售额
FROM 销售记录
GROUP BY 季度
ORDER BY 季度销售额 DESC;

知识点 2:SQL 窗口函数——“取每组前 N 名”

这是 SQL 最强大的能力之一——保留每一行数据,同时给每行加上排名标签。和 GROUP BY 最大的区别:GROUP BY 会压缩行数,窗口函数不会。

三种排名函数

函数同分时例子场景
ROW_NUMBER()不重复,1,2,3,4,5取每组前 N 名(唯一编号)
RANK()同分同名,跳号 1,1,3,4,5比赛排名
DENSE_RANK()同分同名,不跳号 1,1,2,3,4成绩/评分排名

取每组前 N 名是面试必考题,模板背下来:

SELECT 季度, 产品, 金额, 排名
FROM (
    SELECT 季度, 产品, 金额,
           ROW_NUMBER() OVER (PARTITION BY 季度 ORDER BY 金额 DESC) AS 排名
    FROM 销售记录
) AS t
WHERE 排名 <= 3;

子查询先执行,算出每个季度内每个产品的排名;外层 WHERE 过滤前 3 名。

知识点 3:统计学基础——均值、中位数、标准差、相关系数

  • 均值(Mean):数据平均水平。⚠️ 容易被极值拉偏。
  • 中位数(Median):把数据排好,取中间值。抗极值,更真实。
  • 标准差(Std):数据波动大小。标准差越大,数据越不稳定(忽高忽低)。
  • 相关系数(Correlation):两个变量一起涨还是反向走。+1 是强正相关,-1 是强负相关,0 是没关系。相关 ≠ 因果

实际例子:两组产品月销售额都是 5000,但:

  • A 产品:[5000, 5000, 5000, 5000] → 标准差 ≈ 0(很稳定)
  • B 产品:[1000, 2000, 9000, 13000] → 标准差很大(忽高忽低)
    结论:均值一样,但 B 产品风险更高。

复盘(R)

  • Pandas ↔ SQL ↔ Excel 三种工具打通:数据透视表 = Pandas pivot_table = Excel 拖字段,本质都是"按两个维度交叉汇总"。
  • 窗口函数是 SQL 的杀手锏:GROUP BY 能做的分组汇总,窗口函数都能做;而且窗口函数还能做 GROUP BY 做不了的事——保留每一行、算排名。
  • 统计学是数据的"温度计":均值告诉你水平、标准差告诉你稳不稳、相关系数告诉你变量之间的关系——三个指标一起看,数据才有温度。
  • Pandas 干细活、SQL 干重活:复杂计算在 Pandas 做(相关系数、排名),数据入库和聚合在 SQL 做,边界要分清。

一句话总结:数据分析用 SQL 分组聚合(GROUP BY + SUM/AVG/HAVING),窗口函数(ROW_NUMBER)取每组前 N 名,统计学四指标(均值看中位数、标准差看稳定、相关系数看关系)描述数据特征——Pandas ↔ SQL ↔ Excel 三种工具本质相通,边界要分清。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐