数据库原理与应用 第 6 章 · 上机二
课程第 6 章上机二 总分平均最值两种计数去重计数分组筛组三层筛排序取前几名连起来 版式
第 6 章 数据表中的数据查询 · 上机二

聚合与分组

八道题,从五个聚合函数一路做到分组、排序和取前几名。
已完成 0 / 8
本 次 上 机 题 目
  1. 01SUM 和 AVG 会跳过空值
  2. 02MAX 和 MIN 还能相减
  3. 03COUNT 括号里写什么,答案不一样
  4. 04COUNT 里的 DISTINCT
  5. 05GROUP BY 之后再用 HAVING 筛
  6. 06WHERE、GROUP BY、HAVING 一起用
  7. 07一个字段排,两个字段排
  8. 08LIMIT 两种写法,加上取前三
  9. 连续练习:五道统计题
01
第 6 章 · 上机二

SUM 和 AVG 会跳过空值

s2 选了四门课,其中一门没成绩,看看分母是几。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

平均分是总分除以三不是除以四,空的那一门根本没进运算。

知道更多

不加别名时表头就是函数名原样,加上中文别名结果才好念。

想一想

如果那门空成绩按零分算,平均分会是多少?

02
第 6 章 · 上机二

MAX 和 MIN 还能相减

聚合函数算出来的值可以直接参与四则运算。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

MAX 和 MIN 对字符型也有效,比的是字典序,不是长度。

知道更多

第二条查的是全表最高分和最低分,空成绩不参与,所以不会返回 NULL。

想一想

把 MAX 和 MIN 换成 SUM 和 AVG,结果还有意义吗?

03
第 6 章 · 上机二

COUNT 括号里写什么,答案不一样

同一批数据,写星号和写字段名数出来的不是一个数。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

中间那条少数一门,因为 COUNT 写字段名时只数有值的。

练一练

要统计选课门数,上面哪一条写法是错的?
  1. ACOUNT(cno)
  2. BCOUNT(score)
  3. CCOUNT(*)
答案 B

成绩这一列可能为空,用它计数会把缺考的那门漏掉。

04
第 6 章 · 上机二

COUNT 里的 DISTINCT

八个学生填了专业,专业本身只有四种。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

问有几个人用 COUNT,问有几种要加 DISTINCT,两个问题别混。

想一想

COUNT(*) 里为什么不许写 DISTINCT?

05
第 6 章 · 上机二

GROUP BY 之后再用 HAVING 筛

先看分组的全貌,再加条件把不够格的组去掉。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条把条件写进了 WHERE,真机报 1111,因为那时候还没有组。

记牢它两个词的分工

  1. WHERE 分组前筛行
  2. HAVING 分组后筛组
  3. 顺序不能倒
06
第 6 章 · 上机二

WHERE、GROUP BY、HAVING 一起用

先扔掉没成绩的行,再分组,最后筛组。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

三个子句的先后是筛行、归堆、筛堆,写反一个位置就报语法错。

想一想

第一条查询里,s2 的有效选课数是几?

07
第 6 章 · 上机二

一个字段排,两个字段排

主排序字段相同的时候,第二个字段才说得上话。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

第一条里空成绩排在最后,因为降序时 MySQL 把 NULL 当最小值。

知道更多

后两条只差一个次排序字段,课时相同的那两组顺序就调过来了。

08
第 6 章 · 上机二

LIMIT 两种写法,加上取前三

分组、排序、限行三步连起来,就是取前几名的固定套路。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

前两条结果完全一样,第一个数是跳过几行,别和取几行记反。

练一练

每页显示 3 行,要查第 3 页该怎么写?
  1. ALIMIT 3 OFFSET 3
  2. BLIMIT 3 OFFSET 6
  3. CLIMIT 6 OFFSET 3
答案 B

偏移量等于页码减一再乘每页行数,第 3 页就是跳过 6 行取 3 行。

第 6 章 · 上机二

连续练习:五道统计题

不看上面的答案,自己把这五道统计题写出来。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端里的 teaching 库已经建好装好,直接敲查询就行。回车执行,也可以用下面的按钮。
mysql>

重 点

最后一条把五个子句全用上了,顺序是筛行、归堆、选列、排序、限行。

知道更多

写不出来就回到讲义那几页,把对应的例题再敲一遍。

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