目录

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

sql server 查询分组编号 sql数据库分组查询_database

  • 按照某个字段进行分组:

select * from students group by class

根据查询结果,如下图,按照某个字段进行分组,就把某个字段相同的数据,只取其中一条(随便),无规则的

sql server 查询分组编号 sql数据库分组查询_sql server 查询分组编号_02

 一般分组完后,都是对分组好的一组数据进行统计。通常与聚合函数一起使用

按照什么什么分组,再求一些统计值(max,min,sum,avg)的题型 

🧐例1:查询各种性别的人数

select * from students group by sex

sql server 查询分组编号 sql数据库分组查询_navicat_03

 删除了空的一条记录

select sex,count(*) from students group by sex

sql server 查询分组编号 sql数据库分组查询_数据_04

 
🧐例2:查询各种年龄的人数

select age from students group by age

sql server 查询分组编号 sql数据库分组查询_sql server 查询分组编号_05

select age,count(*) from students group by age

sql server 查询分组编号 sql数据库分组查询_数据库_06

❗  注意

       做分组时,按照某一列进行分组,分好组后,一般拿出分组那列显示出来,在根据题目看分组后怎么用聚合函数处理数据,如看分组的数据到底几个人?或者算下,这一组里面谁大或小。

面试问题出现:各个,每个,一般用分组来实现。

用什么分组前面显示就一起显示出来

 🧐练习:查询各个班级学生的平均年龄、最大年龄,最小年龄

select class,max(age),min(age),avg(age) from students group by class

 

sql server 查询分组编号 sql数据库分组查询_数据_07

  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 = '男'

sql server 查询分组编号 sql数据库分组查询_navicat_08

 🧐练习:查询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

sql server 查询分组编号 sql数据库分组查询_database_09

3.5.3 对比where与having

  •   where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
  •  having是对group by的结果进行筛选

3.5.4 按照多字段分组

 若分组时多个字段,多个字段值一模一样时,认为是一组的。

select class,sex,count(*) from students group by class,sex

 

sql server 查询分组编号 sql数据库分组查询_数据库_10

3.6 获取部分行

  • 当数据量过大时,在一页中查看数据是一件非常麻烦的事情
  • 语法
select * from 表名 limit start,count
  • 从start开始,获取count条数据
  • start索引从0开始

sql server 查询分组编号 sql数据库分组查询_sql server 查询分组编号_11


 🧐例1∶查询前3行学生信息

select * from students limit 0, 3

sql server 查询分组编号 sql数据库分组查询_数据库_12

 🧐例2∶查询第5-8行学生信息 

select * from students limit 4, 4

sql server 查询分组编号 sql数据库分组查询_数据库_13

注意:

select * from students limit 5 相当于 select * from students limit 0, 5

 select * from students limit 5相当于把起始位置省略了

sql server 查询分组编号 sql数据库分组查询_数据_14


  🧐练习:查询第4到第6行学生信息

select * from students limit 3,3

 

sql server 查询分组编号 sql数据库分组查询_数据_15

 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