目录
3.5 分组
3.5.1 按字段分组
3.5.2 分组后的数据筛选
3.5.3 对比where与having
3.5.4 按照多字段分组
3.6 获取部分行
3.6.1 分页
3.5 分组
3.5.1 按字段分组
- 按照字段分组:表示此字段相同的数据会被放到一个组中
- 分组后,分组的依据列会是示在结果集中,其他列不会显示在结果集中
- 可以对分组后的数据进行统计,做聚合运算
- 语法:
select 列1,列2,聚合.. from 表名 group by 列1,列2..
🔶说明:
- 先查询全部:
select * from students
- 按照某个字段进行分组:
select * from students group by class
根据查询结果,如下图,按照某个字段进行分组,就把某个字段相同的数据,只取其中一条(随便),无规则的
一般分组完后,都是对分组好的一组数据进行统计。通常与聚合函数一起使用
按照什么什么分组,再求一些统计值(max,min,sum,avg)的题型
🧐例1:查询各种性别的人数
select * from students group by sex
删除了空的一条记录
select sex,count(*) from students group by sex
🧐例2:查询各种年龄的人数
select age from students group by age
select age,count(*) from students group by age
❗ 注意:
做分组时,按照某一列进行分组,分好组后,一般拿出分组那列显示出来,在根据题目看分组后怎么用聚合函数处理数据,如看分组的数据到底几个人?或者算下,这一组里面谁大或小。
面试问题出现:各个,每个,一般用分组来实现。
用什么分组前面显示就一起显示出来
🧐练习:查询各个班级学生的平均年龄、最大年龄,最小年龄
select class,max(age),min(age),avg(age) from students group by class
3.5.2 分组后的数据筛选
- 语法:
select 列1,列2,聚合... from 表名
group by 列1,列2,列3...
having 列1,.. 聚合..
注意: having后面的条件运算符与where的相同
🧐例1∶查询男生总人数
-- 方法一:不用分组
select sex,count(*) from students where sex = '男'
_______________________________________________
-- 方法二:用分组
select sex,count(*) from students group by sex having sex = '男'
🧐练习:查询1班除外其他班级学生的平均年龄,最大年龄,最小年龄
-- 方法一:先过滤在分组
-- select class,avg(age),max(age),min(age) from students group by class having class !='1班'
-- 方法二:先分组在过滤
select class,avg(age),max(age),min(age) from students where class != '1班' group by class
3.5.3 对比where与having
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
3.5.4 按照多字段分组
若分组时多个字段,多个字段值一模一样时,认为是一组的。
select class,sex,count(*) from students group by class,sex
3.6 获取部分行
- 当数据量过大时,在一页中查看数据是一件非常麻烦的事情
- 语法
select * from 表名 limit start,count
- 从start开始,获取count条数据
- start索引从0开始
🧐例1∶查询前3行学生信息
select * from students limit 0, 3
🧐例2∶查询第5-8行学生信息
select * from students limit 4, 4
注意:
select * from students limit 5 相当于 select * from students limit 0, 5
select * from students limit 5相当于把起始位置省略了
🧐练习:查询第4到第6行学生信息
select * from students limit 3,3
3.6.1 分页
- 有了获取部分行,就可以实现分页功能。
- 分页:在表数据较多情况下,需要进行分页
- 已知:每页显示m条数据,求:显示第n页的数据
select * from students limit (n - 1) * m, m
- 求总页数
查询总条数p1
使用p1除以m得到p2。
如果整除则p2为总数页。
如果不整除则p2+1为总页数
🧐将students表(共14列,实现每页显示4条)
-- 每页显示4条
-- 4页 (n -1) * 4
-- 1页
-- select * from students limit 0,4 0 * 4
-- 2页
-- select * from students limit 4,4 1 * 4
-- 3页
-- select * from students limit 8,4 2 * 4
-- 4页
-- select * from students limit 12,4 3 * 4
❗ 注意:
分页功能:不是说让其写一条SQL语句将其分成多页,而是每次执行一个SQL语句查询一部分数据,显示到界面上。
🧐练习;每页显示5条数据。显示每一页的数据
-- 先计算总条数
-- select count(*) from students
-- 每页显示5条
-- 3页
-- 1页
-- select * from students limit 0,5
-- 2页
-- select * from students limit 5,5
-- 3页
-- select * from students limit 10,5