MySQL的基本语法(六)

1、数据分组

(1)分组

  • 按照字段分组,表示此字段相同的数据会被放到一个组中;
  • 分组的目的是配合聚合函数,聚合函数会对每一组的数据分别进行统计;
  • 语法:
select 字段1,字段2,聚合函数...from 表名 group by 字段1,字段2...
  • 举例(注意:使用group by 的前提,前面必须要用聚合函数)
-- 分别查询男女同学的数量
select count(*) from e where sex='女';
select count(*) from e where sex='男';
select sex,count(*) from e group by sex;
  • where与分组
-- 查询来自河北的不同性别学生数量
select sex,count(*) from e where hometown='河北' group by sex;
-- 用数据分组方法,统计不同地区的学生总数、平均年龄、最大年龄、最小年龄的人数;
select hometown,count(*),sum(age),avg(age),max(age),min(age) from e group by hometown; 
  • 综合查询函数select + 聚合函数count + 条件函数where + 分组函数group by + 排序函数order by
    语法:select * from 表名 where 条件 group by 字段 order by 字段;
-- 用数据分组方法,统计不同地区的学生总数、平均年龄、最大年龄、最小年龄的人数,
-- 但不统计河北的学生,统计结果按学号从大到小排序;
select hometown,count(*),sum(age),avg(age),max(age),min(age) from e where hometown!='河北' group by hometown order by number desc;

(2)分组后的数据筛选

  • having总是出现再group by 后面

– 用where查询男生总数;
– where先筛选符合条件的记录,然后再聚合统计;

select count(*) from e where sex='男';

– 用having查询男生总数
– having先分组聚合统计,再统计的结果中筛选;

select count(*) from e group by sex having sex='男';

(3)having配合聚合函数的使用

where 后面条件不能用聚合函数,having可以使用聚合函数;

(4)having与where筛选的区别

  • where是对原始数据进行筛选
  • having是对group by 之后已经分过组的数据进行筛选;
  • having后面可以使用聚合函数,where 后面不能使用聚合函数
-- 查询年龄大于20的学生所来自的省份,以及对应的人数;
select hometown,count(*) from e where age>20 group by hometown;
select age,hometown,count(*) from e group by hometown having age>20;
-- 查询平均年龄大于30岁的地方名称以及对应的人数;
select hometown,count(*) from e group by hometown having avg(age)>30 ;

2、数据分页显示

(1)limit获取部分行

  • 当数据过大时,在一页中查看数据时使用;
  • select * from 表名 where 条件 group by 字段 order by 字段 limit start, count;
  • 语法:limit+开始行(0),结束行(开始行可以省略);
  • 省略start,默认从零开始,即从第一行开始。
select * from 表名 limit start,count

(2)分页

  • 语法:已知每页显示m条数据,求:查询第n页的数据;
select * from 表名 limit(n-1)*m,m;
  • 例子:查询表中,每页显示5条记录,求总页数;
    1)查询记录总条数a;
    2)使用a除以每页显示条数,得到b;
    3)如果b为整数,则b为总数页;
    4)如果b不为整数,则b+1为总页数。

总结

  • 别名:as(表和字段都可以有别名,as可以省略)
  • 过滤重复记录:distinct
  • 条件函数:where
  • 比较运算符:
  • 逻辑运算符
  • 模糊查找:like—>%,_
  • 范围查找:in,between…and
  • 空值判断:is null;is not null;
  • 排序:order by(asc(升序,可省略),desc降序)
  • 聚合函数:count,sum,max,min,avg;
  • 数据分组:group by(having)
  • 显示指定数量的记录:limit(start,count)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值