MySQL 视频课 · 50 集 / DQL 基础:基础查询、条件查询、聚合函数 / P17
第 17 集 / 共 50 · DQL 基础:基础查询、条件查询、聚合函数 · 视频 p=17 · 时长 6:39
P17 17. 基础-SQL-DQL-聚合函数
看视频,对照阅读:在新标签打开原视频(p=17)
把多行算成一个数,顺便理解 NULL 对统计的影响。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
聚合函数把多行压成一个数:一共多少人、平均多少、最大最小、总和。这一集讲 COUNT、AVG、MAX、MIN、SUM。
按这 4 步做
- 五个函数各管一件事:
COUNT()数行、AVG()平均、MAX()最大、MIN()最小、SUM()求和。参数写列名,COUNT(*)数的是行。 - 它们都把一整列(或整张表)算成一个值,所以不写 GROUP BY 时,结果只有一行。
- 关键差别:
COUNT(*)数所有行,COUNT(列名)跳过该列为 NULL 的行;AVG 和 SUM 同样忽略 NULL。 - 所以“平均薪水”用 AVG(salary) 时,没填薪水的人不参与分母。想按“包括没填的人”算,要先想清楚业务定义。
小例
SELECT COUNT(*) AS 总人数,
COUNT(salary) AS 有薪水人数,
AVG(salary) AS 平均薪水
FROM employee;
结果一行三列:总人数 4、有薪水人数 3、平均薪水 10000.00。因为小李的 salary 是 NULL,被 COUNT(salary) 和 AVG 跳过;10000 =(8000+10000+12000)÷3,不是除以 4。看这三个数就能理解 NULL 对统计的影响。
易错点
- 以为 COUNT(列) 和 COUNT(*) 一样。有 NULL 时结果会差。
- 把 AVG 的分母当总行数。它只算非 NULL 的行。
- 在 WHERE 里写
WHERE COUNT(*) > 3。聚合函数不能放在 WHERE,这类筛选要等 GROUP BY/HAVING(后续课)。
30 秒速记
COUNT 数、AVG 均、MAX/MIN 极值、SUM 和;不分组只出一行;聚合忽略 NULL。
自测(2 题,先答再展开)
自测 1:员工 4 人,其中 1 人薪水为 NULL,COUNT(*) 和 COUNT(salary) 各是多少?
COUNT(*) 是 4,COUNT(salary) 是 3。前者数行,后者只数该列非 NULL 的值。
自测 2:为什么 AVG(salary) 不等于 SUM(salary)/COUNT(*)?
AVG 的分母是 COUNT(salary),即非 NULL 的行数;COUNT(*) 把 NULL 行也算进分母,会把平均值拉低。两种算法对应不同的业务口径。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| B站原视频 P17《17. 基础-SQL-DQL-聚合函数》 | 平台视频页 · P17 | 标题、时长与分 P 信息取自平台公开页面;仅作外链,不在站内播放 |
| 本集采样画面 p17_t30.jpg(约 119s) | 平台视频页 · P17 / 约 119s | 已人工查看该帧:Workbench 中“聚合函数”练习:注释列出 COUNT/AVG/MAX/MIN/SUM 五项统计任务,左侧为 emp 表;只证明这一画面,不代表整集讲解 |
| MySQL 8.0 Reference Manual: Aggregate Functions | 官方文档 | 语法条目备查,未逐字引用 |
以同版讲义公开镜像核对:讲义 2.6.4 聚合函数(p45–46)。原声字幕未取得(匿名接口字幕轨为空且需登录),讲师逐句讲解未核;本页示例、表与数字为站内原创,不是课堂原表。
讲义对照:讲义 2.6.4 聚合函数 · p45–46(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–6:26 / 全片 6:39(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。