计算机应用

导航

第12周 计算字段、函数与数据汇总

第12周 · 计算字段、函数与数据汇总

这周学 SQL 的"加工能力":查询时当场拼接文本、算数、调函数,以及最常用的聚合汇总(总数、平均分、最大最小)。成绩单自动统计就靠它们。


一、知识点:计算字段

计算字段是查询时临时算出来的列,不写回表里。比如把"姓名+系"拼成一个显示串:

SELECT CONCAT(sname, '-', sdept) AS info FROM student;

结果:张伟-计算机系AS info 给这列起名,方便看。

还可做算术:SELECT sid, sage+1 AS 明年年龄 FROM student;(年龄+1)。


二、操作教程:字符串函数

函数 作用 示例
CONCAT(a,b) 拼接 CONCAT(sname,'-',sdept)
UPPER(s) / LOWER(s) 转大写/小写 UPPER(sname)
LENGTH(s) 字符长度 LENGTH(sname)
LEFT(s,n) 取左 n 个字符 LEFT(sname,1) 取姓
TRIM(s) 去首尾空格 TRIM(sname)

作业题1:拼接"姓名-系"并转大写姓名

SELECT CONCAT(sname, '-', sdept) AS info, UPPER(sname) FROM student;

三、操作教程:数值与日期函数

-- 数值:四舍五入,保留1位
SELECT ROUND(AVG(sage), 1) FROM student;     -- 19.50 → 19.5

-- 日期:当前日期 / 当前时间
SELECT CURDATE();     -- 2026-08-29(仅日期)
SELECT NOW();         -- 2026-08-29 14:30:00(日期+时间)

常用:ROUND(x,n) 四舍五入、CURDATE() 当前日期、NOW() 当前日期时间。


四、知识点 + 操作:聚合函数

聚合函数对一组行算出一个汇总值:

函数 作用
COUNT(*) 总行数
SUM(列) 求和
AVG(列) 平均值
MAX(列) 最大值
MIN(列) 最小值

作业题2:人数、最大/最小/平均年龄

SELECT
  COUNT(*)        AS cnt,
  MAX(sage)       AS max_s,
  MIN(sage)       AS min_s,
  AVG(sage)       AS avg_s
FROM student;

五、知识点:COUNT(*) 与 COUNT(列) 的区别(重点)

  • COUNT(*):统计所有行数,包括值为 NULL 的行。
  • COUNT(列):统计该列非 NULL 的行数,NULL 不计入。
SELECT COUNT(*) FROM student;        -- 4(全部4人)
SELECT COUNT(sage) FROM student;     -- 若某人生龄为空,会少算

高频考点:聚合函数(COUNT/SUM/AVG/MAX/MIN)统统忽略 NULL。算"缺考人数"用 COUNT(*),算"有效成绩"用 COUNT(grade)(自动排除缺考 NULL)。


六、操作教程:函数嵌套

函数可以套函数,从内往外算:

-- 当前日期 + 平均年龄四舍五入保留1位
SELECT CURDATE() AS cur_date, ROUND(AVG(sage), 1) AS avg_s FROM student;

七、综合实操:作业三题

-- 题1:拼接 info + 大写姓名
SELECT CONCAT(sname, '-', sdept) AS info, UPPER(sname) FROM student;

-- 题2:人数/最大/最小/平均年龄
SELECT COUNT(*) AS cnt, MAX(sage) AS max_s, MIN(sage) AS min_s, AVG(sage) AS avg_s
FROM student;

-- 题3:当前日期 + 平均年齡四舍五入1位
SELECT CURDATE() AS cur_date, ROUND(AVG(sage), 1) AS avg_s FROM student;

八、易混点排查表

现象 解决方法
COUNT(*)COUNT(列) 结果不同 后者不计 NULL 行;按需求选
平均值算出来偏少 列里有 NULL 被 AVG 忽略;确认是否该用 COUNT(*)
CONCAT 出现 NULL 任意一列为 NULL,CONCAT 整串变 NULL;用 IFNULL(列,'') 兜底
ROUND 没生效 确认是 ROUND(值, 小数位);参数顺序别反
字符串忘了引号 函数内文本参数仍需单引号
聚合和单行列混选报错 SELECT sname, AVG(sage) 不行;聚合需配合分组(下周 GROUP BY)

九、小测验(自测)

  1. CONCAT(sname,'-',sdept) AS info 的作用是什么?AS 起的名字会改表里数据吗?
  2. COUNT(*)COUNT(sage) 结果在什么情况下不同?为什么?
  3. 聚合函数(AVG/SUM/MAX)遇到 NULL 怎么处理?
  4. 求平均年龄四舍五入保留 1 位小数,并查当前日期,怎么写?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(11)  评论(0)    收藏  举报