MySQL 聚合函数做数据分析 完整教程(零基础直接上手)

1 阅读3分钟

一、先搞懂:什么是聚合函数

聚合函数 = 把多行数据汇总成1行统计结果 数据分析90%的基础报表,全靠它:求和、计数、平均、最大最小、分组占比

常用5大核心聚合函数:

函数作用场景
COUNT()统计行数/非空值数量用户数、订单数、商品数量
SUM()求和销售额、总销量、总收入
AVG()平均值客单价、平均下单金额
MAX()最大值最高单价、最晚下单时间
MIN()最小值最低单价、最早注册时间

二、基础用法:单表简单统计

1. COUNT 计数分析

-- 统计总订单数
SELECT COUNT(*) AS 总订单数 FROM order_list;

-- 统计有支付金额的订单(忽略NULL)
SELECT COUNT(pay_money) AS 有效订单数 FROM order_list;

-- 统计不重复的用户数
SELECT COUNT(DISTINCT user_id) AS 独立用户数 FROM order_list;

2. SUM / AVG 金额&销量分析

-- 总销售额、平均客单价
SELECT
  SUM(pay_money) AS 总销售额,
  AVG(pay_money) AS 平均客单价
FROM order_list;

3. MAX / MIN 极值分析

-- 最大单笔订单、最小订单金额、最早/最晚下单时间
SELECT
  MAX(pay_money) AS 最大订单金额,
  MIN(pay_money) AS 最小订单金额,
  MAX(create_time) AS 最晚下单时间,
  MIN(create_time) AS 最早下单时间
FROM order_list;

三、数据分析核心:GROUP BY 分组聚合

单用聚合没意义,搭配 GROUP BY 才是数据分析 逻辑:先分组 → 再每组内聚合统计

1. 按维度分组统计(最常用)

  • 日期:日/月/年销售额
  • 地区:各城市销量
  • 品类:各商品分类营收
  • 用户等级:VIP/普通用户消费

示例1:按月份统计每月销售额、订单数

SELECT
  DATE_FORMAT(create_time,'%Y-%m') AS 订单月份,
  COUNT(*) AS 月度订单数,
  SUM(pay_money) AS 月度销售额,
  AVG(pay_money) AS 月度平均客单价
FROM order_list
GROUP BY 订单月份
ORDER BY 订单月份;

示例2:按城市分组统计

SELECT
  city AS 城市,
  COUNT(DISTINCT user_id) AS 城市用户数,
  SUM(pay_money) AS 城市总销售额
FROM order_list
GROUP BY city;

四、筛选分组后的数据:HAVING 用法

  • WHERE分组前过滤原始行(不能用聚合函数)
  • HAVING分组后过滤统计结果(可以用聚合函数)

需求:只筛选月度销售额大于10000的月份

SELECT
  DATE_FORMAT(create_time,'%Y-%m') AS 订单月份,
  SUM(pay_money) AS 月度销售额
FROM order_list
GROUP BY 订单月份
HAVING 月度销售额 > 10000;

五、进阶:聚合函数+多表联查 做业务分析

场景:关联用户表+订单表,统计每个用户下单次数和总消费

SELECT
  u.user_id,
  u.user_name,
  COUNT(o.order_id) AS 下单次数,
  SUM(o.pay_money) AS 累计消费
FROM user_info u
LEFT JOIN order_list o ON u.user_id = o.user_id
GROUP BY u.user_id, u.user_name
ORDER BY 累计消费 DESC;

六、高级分析:聚合做占比、分层统计

1. 统计各类别销售额占比

-- 先算分类销售额,再看占整体比例
SELECT
  category AS 商品分类,
  SUM(pay_money) AS 分类销售额,
  SUM(pay_money)/(SELECT SUM(pay_money) FROM order_list) AS 销售额占比
FROM order_list
GROUP BY category;

2. 条件聚合(一行做多维度统计)

不用多次分组,一条SQL统计已支付/未支付订单数

SELECT
  COUNT(*) AS 总订单,
  SUM(IF(status=1,1,0)) AS 已支付订单,
  SUM(IF(status=0,1,0)) AS 未支付订单
FROM order_list;

七、聚合函数数据分析 通用套路

  1. 确定分析维度:时间、地区、品类、用户层级
  2. 选聚合指标:数量用COUNT、金额用SUM、均值用AVG
  3. GROUP BY 对应维度
  4. ORDER BY 排序看高低
  5. HAVING 筛选达标数据
  6. 多维度就多表JOIN再分组聚合