数据库原理与应用 第 6 章 · 第三节
课程 › 第 6 章 › 第三节 聚合函数MAX 与 COUNTCOUNT DISTINCTGROUP BYHAVING排序LIMIT综合 版式
第 6 章 数据表中的数据查询 · 第三节

聚合函数、分组与排序

五个聚合函数,GROUP BY 与 HAVING,ORDER BY 与 LIMIT
本 节 知 识 点
  1. 16聚合函数
  2. 17最大值、最小值和计数
  3. 18COUNT 与 DISTINCT
  4. 19分组查询:GROUP BY
  5. 20分组后筛选:HAVING
  6. 21查询结果排序:ORDER BY
  7. 22限制查询结果数量:LIMIT
  8. 23分组、排序和 LIMIT 一起使用
16
第 6 章 · 第三节 · 课件第 22、23 页合并重做

聚合函数

聚合函数把一列值计算成一个结果,空值不参与计算。

6.1 单关系数据查询课件第 22、23 页合并

聚合函数:把一列值算成一个结果

函数作用
COUNT(*)统计行数
COUNT(字段)统计这个字段中非空值的个数
SUM(字段) AVG(字段)求和、求平均值
MAX(字段) MIN(字段)求最大值、最小值
例 6-20 学号 s2 的学生的总分和平均分
SELECT SUM(score) AS 总分, AVG(score) AS 平均分
FROM sc
WHERE sno = 's2';
总分平均分
208.5069.500000
s2 的四条选课记录
cnoscore
c470.00
c557.00
c681.50
c7NULL
s2 选了 4 门课,其中 1 门成绩为空。除 COUNT(*) 外,聚合函数都跳过空值,所以平均分是 208.50 除以 3。

试一试同样四行,四个函数的结果

计算
学号 s2 的四条选课记录
cnoscore
c470.00
c557.00
c681.50
c7NULL
点一个函数,高亮的是参与计算的行。

实 验

实验 2-1 聚合函数

17
第 6 章 · 第三节 · 课件第 24 页

最大值、最小值和计数

聚合函数的结果还可以参与运算。

课件第 24 页

练一练

s2 选了 4 门课,其中一门成绩为空。COUNT(score) 返回几?
  1. A4
  2. B3
  3. C1
答案 B

COUNT 括号中写字段名时,只统计非空的值,成绩为空的那一门不算。

实 验

实验 2-1 聚合函数

18
第 6 章 · 第三节 · 课件第 25 页

COUNT 与 DISTINCT

COUNT(DISTINCT 字段) 统计有几种不同的值。

课件第 25 页

分清楚

写法统计的是
COUNT(maj)填了专业的人数
COUNT(DISTINCT …)有几种不同的专业
19
第 6 章 · 第三节 · 课件第 26 页

分组查询:GROUP BY

GROUP BY 把字段值相同的行分为一组,每组在结果中占一行。

课件第 26 页

重 点

SELECT 后面除了聚合函数,只能写 GROUP BY 中出现的字段。

实 验

实验 2-2 分组统计

20
第 6 章 · 第三节 · 课件第 27 页

分组后筛选:HAVING

HAVING 对分组后的结果进行筛选。

课件第 27 页

试一试WHERE 与 HAVING 在哪一步起作用

条件写在
  1. FROM sc 取出选课表的 20 行
  2. WHERE 逐行筛选
  3. GROUP BY sno 按学号分组
  4. HAVING 逐组筛选
两个子句都写条件,筛选的对象不同。

重 点

WHERE 中不能使用聚合函数,写 COUNT 会报 1111。对组的条件写在 HAVING 中。

实 验

实验 2-3 分组后筛选

21
第 6 章 · 第三节 · 课件第 28、29、30 页合并重做

查询结果排序:ORDER BY

ORDER BY 按一个或多个字段排序,默认升序。

6.1 单关系数据查询课件第 28、29、30 页合并

ORDER BY:对查询结果排序

ORDER BY 字段1 [ASC | DESC] [, 字段2 [ASC | DESC] …]
  • ASC 升序,DESC 降序,不写时默认升序
  • ORDER BY 写在 WHERE、GROUP BY、HAVING 之后,LIMIT 之前
例 6-28 课程按课时降序
SELECT *
FROM c
ORDER BY ct DESC;
例 6-29 课时相同时再按课程名降序
SELECT *
FROM c
ORDER BY ct DESC, cn DESC;
cnocnct
c4数据结构64
c7高等数学60
c5数据库系统56
c3线性代数48
c2程序设计基础48
c1Java程序设计40
c6数据挖掘32
c8控制理论32
第一个字段的值相同时才看第二个字段。每个字段的 ASC、DESC 各写各的,cn DESC 的 DESC 不能省。
22
第 6 章 · 第三节 · 课件第 31、32 页合并重做

限制查询结果数量:LIMIT

LIMIT 的两个数,前一个是跳过的行数,后一个是返回的行数。

6.1 单关系数据查询课件第 31、32 页合并

LIMIT:限制返回的行数

LIMIT [偏移量,] 行数 LIMIT 行数 OFFSET 偏移量
  • 偏移量表示先跳过几行,从 0 开始。只写一个数时,它是行数,从第 1 行开始取
  • 行数超过实际行数时,返回实际有的全部行
例 6-30 从第 2 位教师开始,取 3 位
SELECT tno, tn, prof
FROM t
LIMIT 1, 3;

等价写法:LIMIT 3 OFFSET 1

tnotnprof
t2石丽讲师
t3顾伟副教授
t4赵礼教授

重 点

LIMIT 1, 3 表示跳过 1 行,取 3 行,也就是第 2 到第 4 行。

23
第 6 章 · 第三节 · 课件第 33 页

分组、排序和 LIMIT 一起使用

先分组统计,再按统计结果排序,最后取前几行。

课件第 33 页

重 点

子句的顺序是 GROUP BY、ORDER BY、LIMIT,不能调换。

知道更多

ORDER BY 中可以直接使用 SELECT 中起的别名,如 选课人数。

实 验

实验 2-5 取前几名

保山学院·人工智能教研室·曹鼎鼎