当前课程知识点:MySQL数据库案例教程 >  第4章 查询与视图 >  4.2 单表查询 >  4-2-3group子句

返回《MySQL数据库案例教程》慕课在线视频课程列表

4-2-3group子句在线视频

下一节:4-2单表查询实训

返回《MySQL数据库案例教程》慕课在线视频列表

4-2-3group子句课程教案、知识点、字幕

下面我们来学习group by子句

Group by是分组子句

用于分组聚合统计

所谓聚合

是指对多条记录的某个字段值

进行统计计算

如统计平均值 总和 个数

最大值 最小值等

那接下来我们先来认识几个聚合函数

avg(),sum(),count()

max(),min(),AVG( )

用于计算平均值

SUM( ) 求和 COUNT( ) 计数

MAX( ) 最大值 MIN( ) 最小值

下面通过案例

来学习聚合函数的用法

案例21

统计score表中

所有学生的总分 平均分

最高分和最低分

语句可以这样写

Select sum(result),avg(result)

max(result),min(result)

From score

执行

查询出表中所有学生的

总分 平均分 最高分和最低分

来看案例22

统计score表中01号课程的

总分 平均分 最高分和最低分

语句可以这样写

Select sum(result),avg(result)

max(result),min(result)

From score

Where cno=’01’

执行

查询出01号课程的

总分 平均分 最高分和最低分

来看案例23

统计score表中

参与考试的学生人数和总人次

语句可以这样写

SELECT COUNT(DISTINCT sid) 人数

COUNT(*) 人次

FROM score

Count的参数可以是* 也可以是字段

*表示统计符合条件的所有记录

包含空值null

也可以是一个字段

是字段时可以使用distinct

消除掉重复值

使用*时不能使用distinct

我们来执行

查询出表中

参与考试的总人次数和学生人数

参与考试的人数是11人

总人次是44次

来看案例24

统计student表中男生的人数

查询语句可以这样来写

Select count(*)

From student Where sex=’男’

执行

查询出男生人数有7人

来看案例25

统计student表中女生的人数

语句可以这样写

Select count(*)

From student

Where sex=’女’

执行

查询出女生人数为6人

那么请大家思考案例26

统计student表中男 女生的人数

要同时统计出男女生人数

那该怎么来实现呢

前几个例子都是只能通过

where筛选出某一个字段值的情况

如01号课程

或男生 或女生

要同时统计出

性别的两个不同字段值的数据信息

就没有办法使用where来实现

要解决这个问题

需要使用分组子句

首先来看group by语法

GROUP BY 字段 HAVING 分组条件

它的功能是按字段值

对记录进行分组

聚合函数对每组进行聚合运算

HAVING 分组条件

是在查询出的分组结果中

筛选除满足条件的数据

来看案例26

统计student表中男女生人数

语句可以这样写

Select sex,count(*) 人数

From student

Group by sex

执行

可以看到统计出男女生的人数

案例27

查询统计每门课平均分

显示平均分在80以上的

课程号和平均分

先统计每门课的平均分

语句可以这样写

Select cno,avg(result)

From score

Group by cno

再在统计的结果里

筛选出平均分80分以上的

having avg(result)>=80

执行

筛选出平均分在80以上的

课程号和平均分的两条数据

avg(result)>=80

能不能放在where子句呢

我们来看查询

出现错误

invalid use of group function

错误使用分组函数

也就是avg(result)

不能直接使用在where子句中

那么请同学们注意

聚合函数一般只能出现在

select子句或having子句中

直接出现在where是不允许的

更复杂的应用

我们将在子查询进行学习

案例28

查询统计出

01 02 03号课程的平均分

显示平均分

在80以上的课程号和平均分

查询统计结果

查询统计课程平均分

在80分以上的

我们刚刚讲过

可以这样写语句

Select cno,avg(result)

From score

Group by cno

having avg(result)>=80

那么如何只显示

01 02 03号课程的平均分呢

可以通过先筛选出

01 02 03号课程

添加where子句

where cno in (‘01’,’02’,’03’)

执行

可以看到

01 02 03号课程中平均分

在80以上的只有02号课程

那么这个条件

能不能放到having条件里呢

我们来尝试以下

在分组条件后添加

and cno in (‘01’,’02’,’03’)

好 这个语句是这样的

SELECT cno,AVG(result)

FROM score

GROUP BY cno HAVING

AVG(result)>=80

AND cno IN ('01','02','03')

执行

结果与第一条语句相同

在这里要注意where和having区别

where是先过滤表中记录

满足条件的记录

才进行分组聚合运算

而having是对分组后的

聚合运算结果进行筛选

对于group by子句

请同学们掌握聚合函数

和groupby 的使用

并搞清楚where和having的区别

下面来学习order by子句

order by子句

是对查询结果排序输出

asc为升序 DESC为降序

asc或desc可以省略

默认为升序

可以有多个排序字段

当有多个排序字段时

结果先按照第一个排序字段排序

当第一排序字段的值相同时

第一字段值相同的记录

再按第二排序字段排序

依次类推

来看案例29

查询score表中的成绩

按成绩从高到底排序

成绩相同 按照学号从小到大排序

排序结果的输出使用order by字段

语句可以这样写

Select * from score

Order by result desc

再按学号排序

学号是升序

升序是默认的

可以写也可以不写

sid asc

执行

可以看到查询结果

按照成绩从高到低排序

成绩相同

按照学号从小到大排序

案例30

查询学生基本信息

按年龄从小到大排序输出

这个查询不需要计算年龄

年龄从小到大

那么出生日期就是从大到小

从大到小就是降序

语句可以这样写

Select * from student

Order by birth desc

执行

可以看到查询结果按照

出生日期从大到小排序

最后我们再来学习limit子句

limit子句有两个参数

offset和记录数

offset是相对于

第一条记录的偏移量

第一条记录的偏移量为0

第二条记录的偏移量为1

以此类推

这个参数可以省略

记录数就是输出记录的行数

来看案例31

查询输出01号课程的前3名成绩

这个查询需要

先查询出01号课程的成绩

再按成绩从高到底排序

那么怎么输出三条记录呢

可以使用limit子句

语句可以这样写

Select * from score

Where cno=’01’

Order by result desc

Limit 0,3

执行

查询出01号课程成绩的前3名

并且从大到小排序

再来看一个案例

案例32

查询输出01号课程

成绩的第2和第3名

语句可以这样写

Select * from score

Where cno=’01’

Order by result desc

输出第二和第三条记录

那么偏移是1 记录数是2

执行

那么就查询出

01号课程的第2和第3名的成绩

以上我们通过单表查询

系统地学习了select语句的select子句

where子句 groupby子句 orderby子句

limit子句的用法

请同学们先记住select语句的语法

并通过练习掌握每个子句用法

只有熟练掌握select基本语法

才能为后面的多表查询

和子查询的学习打下基础

讲课的案例和操作题

都在资料压缩包内

请同学们自行下载练习

并调试完成操作练习

本次课就讲到这里

谢谢 再见

MySQL数据库案例教程课程列表:

第1章 数据库基础知识

-1.1 数据库基础知识

--1.1 数据库基础知识视频

--1-1数据库基础知识课件

-1.2 MySQL的安装与运行

--1-2MySQL安装与运行视频

--1-2MySQL安装与运行课件

--1-2MySQL安装与运行实训

-第1章 测试

第2章 数据库和表的基本操作

-2.1 数据库的基本操作

--2-1数据库的基本操作视频

--2-1数据库的基本操作课件

--2-1数据库的基本操作实训

-2.2 表的基本操作

--2-2表的基本操作视频

--2-2表的基本操作课件

--2-2表的基本操作实训

-2.3 MySQL数据类型

--2-3MySQL数据类型视频

--2-3MySQL数据类型课件

--2-3MySQL数据类型实训

-2.4 约束设置

--2-4约束设置视频

--2-4约束设置课件

--2-4约束设置实训

-2.5 索引

--2-5索引视频

--2-5索引课件

--2-5索引实训

-第2章测试

第3章 记录操作

-3.1 插入记录

--3-1 插入记录视频

--3-1插入记录课件

--3-1插入记录实训

-3.2 修改记录

--3-2修改记录视频

--3-2修改记录实训

--3-2修改记录课件

-3.3 删除记录

--3.3删除记录

--3-3删除记录实训

--3-3删除记录课件

-第3章 测试

第4章 查询与视图

-4.1 select语句

--4.1select 语句视频

--4-1select语句课件

--4-1select语句实训

-4.2 单表查询

--4-2-1select子句

--4-2-2where子句

--4-2-3group子句

--4-2单表查询实训

-4.3 多表查询

--4-3多表查询视频

--4-3多表查询课件

--4-3多表查询实训

-4.4 子查询

--4-4子查询视频1

--4-4子查询视频2

--4-4子查询课件

--4-4子查询实训

-4.5 外键

--4-5外键视频

--4-5外键课件

--4-5外键实训

-4.6 视图

--4-6视图视频1

--4-6视图视频2

--4-6视图课件

--4-6视图实训

-第4章测试

第5章 高级操作

-5.1 函数

--5-1自定义函数视频

--5-1系统函数

--5-1函数课件

--5-1 函数实训

-5.2 流程控制语句

--5-2流程控制语句视频

--5-2流程控制课件

--5-2流程控制实训

-5.3 事务与游标

--5-3事务与游标视频

--5-3事务与游标课件

--5.3事务与游标实训

-5.4 存储过程

--5-4存储过程视频

--5-4存储过程课件

--5-4存储过程实训

-5.5 触发器

--5-5触发器视频

--5-5触发器课件

--5-5触发器实训

-第5章测试

第6章 备份与还原

-6.1 数据库备份与还原

--6-1数据库备份与还原 视频

--6-1数据库备份与还原 课件

--6-1数据库备份与还原 实训

-6.2 异构数据源导入导出

--6-2异构数据源导入导出 视频

--6-2异构数据源导入导出 课件

--6-2异构数据源导入导出 实训

-第6章测试

第7章 用户与权限

-7.1 用户管理

--7-1用户管理 视频

--7-1用户管理 课件

--7-1用户管理 实训

-7.2 权限管理

--7.2 权限管理 视频

--7.2 权限管理 课件

--7.2 权限管理 实训

-7.3 应用实例开发

--7-3应用实例开发 视频

--7-3应用实例开发 课件

--7-3应用实例开发 实训

-第7章测试

4-2-3group子句笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。