🗄️ 第三章 操作数据库-SQL的使用方法
📄 一句话概括

SUM 求一列总和、AVG 求一列平均——聚合函数收官;两者都自动忽略 NULL,平均值分母因此藏着惊喜。

📝 本节和前面几节的关系

聚合四件套的最后两件。AVG 是四件里最能暴露【NULL 脾气】的——钱七那一格空值,会让【平均分】的分母悄悄变 4。

一、两条命令

-- 准备块(没建表先跑 3-6 的准备块)

SELECT SUM(score) AS 总分 FROM students;    -- 85+92+78+64 = 319
SELECT AVG(score) AS 平均分 FROM students;  -- 319 / 4 = 79.75

看仔细:平均分是 79.75,不是 319 ÷ 5 = 63.8。

二、NULL 到底怎么算的:一张验算表

行 score
张三 85
李四 92
王五 78
赵六 64
钱七 NULL(跳过)

三、动手 Demo:四件套一锅端

-- 一句话把四个聚合全要了
SELECT COUNT(score) AS 有分人数,
       MAX(score)   AS 最高分,
       MIN(score)   AS 最低分,
       AVG(score)   AS 平均分
FROM students;

输出:

有分人数  最高分  最低分  平均分
4         92      64      79.75

看到什么算成功:一行四列、平均分 79.75——能自己验算出【分母是 4 不是 5】,本节就算过关。

四、30 秒实验

亲手对比两种平均:

SELECT AVG(score)                 AS 缺考不算 FROM students;   -- 79.75
SELECT SUM(score) / COUNT(*)      AS 缺考算零 FROM students;   -- 63.8

——同一个班,两种【平均分】差出近 16 分。业务报表【平均销售额暴跌】有时只是【有人没填数】被 AVG 静默跳过——先问清 NULL 的口径再谈平均。

五、常见误区

  1. "AVG 的分母是总行数" —— 是有值的行数(NULL 不进分母);要按总人数平均得用 SUM/COUNT(*) 自己拼。
  2. "SUM 遇到 NULL 会报错" —— 不会,NULL 被静默跳过;但整列全空时 SUM 给 NULL、AVG 也给 NULL(连分母 0 都不给你,避免除零)。
  3. "聚合函数和普通列能随便混选" —— SELECT name, AVG(score) 与 3-16 的坑同款:不可靠。混选必须配合 GROUP BY(3-18)。
自测三问(点开对答案) 1. 本表 SUM 和 AVG 各是多少? **SUM=319,AVG=79.75(319 ÷ 4)**——NULL 不进分子也不进分母。 2. 【缺考按 0 分算的平均】怎么写? **`SUM(score) / COUNT(*)`**——分母换成总行数。 3. 整列全 NULL 时 SUM/AVG 返回什么? **NULL**(COUNT 对空给 0,态度不同)。

相关笔记