一、先搞懂:什么是聚合函数
聚合函数 = 把多行数据汇总成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;
七、聚合函数数据分析 通用套路
- 确定分析维度:时间、地区、品类、用户层级
- 选聚合指标:数量用COUNT、金额用SUM、均值用AVG
- GROUP BY 对应维度
- ORDER BY 排序看高低
- HAVING 筛选达标数据
- 多维度就多表JOIN再分组聚合