S
面向产品经理的交互式SQL教学
通过真实业务数据,练习产品分析 SQL。
SQL 课程 10:带聚合函数的查询(第 1 部分)
产品分析常常不需要逐条查看商机,而是想快速得到一个总数:本月有多少商机、已成交金额是多少、平均成交金额大约多少。聚合函数会把多行记录压缩为一个汇总值,正适合回答这类问题。
本课使用 sales_pipeline 商机表。它记录了每笔商机的阶段和成交金额;你将从逐行浏览,升级到用一条查询得到业务概览。
在 SELECT 中使用聚合函数
SELECT 聚合函数(字段) AS 指标名称 FROM 表名 WHERE 筛选条件;
聚合函数把很多行变成一个答案
COUNT 用于计数,SUM 计算总和,AVG 计算平均值,MIN 和 MAX 分别找最小与最大值。除非后续使用 GROUP BY 分组,否则一条聚合查询通常只返回一行结果。
例如,销售负责人问“所有已成交商机累计带来了多少收入”,你不需要导出 4,000 多行再手工相加;SUM 就能在数据库中完成计算。
常用聚合函数
| 函数 | 作用 | CRM 示例 |
|---|---|---|
| COUNT(*) | 统计记录行数 | COUNT(*) AS opportunity_count |
| SUM(字段) | 计算数值总和 | SUM(close_value) |
| AVG(字段) | 计算数值平均值 | AVG(close_value) |
| MIN(字段) | 返回最小值 | MIN(close_value) |
| MAX(字段) | 返回最大值 | MAX(close_value) |
先筛选,再汇总
WHERE 会在聚合前筛掉不需要的记录。若要计算已成交金额,应该先筛出 deal_stage = 'Won',再对 close_value 求和;否则跟进中和已流失商机也会混入结果。
NULL 会被 SUM、AVG、MIN、MAX 忽略;COUNT(*) 则会统计每一行。理解这个差异,能避免把“未关闭、没有金额”的商机误计入平均值。
计算已成交商机的总成交金额
SELECT SUM(close_value) AS won_close_value FROM sales_pipeline WHERE deal_stage = 'Won';
小提醒:聚合结果也应使用 AS 起清晰别名。页面会把 won_close_value 显示为“已成交金额合计”,SQL 中仍需使用原别名。
练习
每题都会返回一个汇总指标。请注意聚合字段、筛选条件和 AS 别名都属于验收范围。
表格:sales_pipeline(商机)
显示第 0–0 行
第 1 / 1 页
正在准备浏览器内 SQL 数据库…