MYSQL第6章 聚合函数和分组查询

一 、 聚合函数介绍

1、在数据库查询过程中,不仅只返回数据的基础信息,有时还需对这些数据进行统计和汇总。MySQL 提供了聚合函数,用于实现这些高级功能。

2、聚合函数用于对一组值进行计算并返回一个汇总值,使用聚合函数可以统计记录行数、计算某个字段值的总和以及这些值的最大值、最小值和平均值等。

 函数名称

功能

 sum

返回选取的某列值的总和

 max

返回选取的某列的最大值

 min

返回选取的某列的最小值

 avg

返回选取的某列的平均值

 count

返回选取的某列或记录的行数

3、示例

计算所有线路总里程数:

select sum(miles) 线路总里程数 from line; 

计算公交二公司所属线路总里程数:

select sum(miles) 线路总里程数 from line where company=' 公交二公司 ';

对所有线路的总站点数进行汇总:

select sum(number) 线路总站点数 from line;

查询年龄最大的公交司机的出生年月:

select min(birthday) 最年长司机生日 , ceil(datediff(curdate(),min(birthday))/365) 该司机年龄 from driver;

 内置函数 curdate() 显示当前日期。  内置函数 datediff(date1,date2) 用于计算日期 date1 和 date2 之间相隔的天数。  内置函数 ceil(num1) 的值为大于等于 num1 的最小整数。

二 、avg 函数 

1、avg(column) 用于返回数字型字段 column 的平均值,注意:列值为 null 的字段不参与运算。

示例:

获取线路里程的平均值:

select avg(miles) 平均里程数 from line;

获取公交二公司所属线路的平均里程数:

select avg(miles) 平均里程数 from line where company=' 公交二公司 ';

2、count 函数

count 函数用于统计记录行数。使用 count 函数时,必须指定一个列的名称或使用“*”。使用“*”可获取整张表的记录行数。注意:列值为 null 的字段不参与运算。

统计所有公交线路的数量:

select count(*) 线路数 from line;   或 select count(lineNo) 线路数 from line;

三 、分组查询 group by 子句

group by 子句通常与聚合函数同时使用,如 max()、min()、count()、sum() 和 avg()。

示例:

统计非“通恒公司”所属线路的数量和营运里程的平均值、最大值和最小值,并按照线路数升序显示查询结果:

select company 公司 , count(*) 线路数 , truncate(avg(miles),1) 平均线路里程 , max(miles) 最长线路里程 , min(miles) 最短线路里程 from line where company<> ' 通恒公司 ' group by company order by count(*)

四 、多字段分组和 having 子句

group by 子句的分组字段是一个字段列表,即 MySQL 支持按多个字段进行分组。具体的分组策略:分组优先级从左至右,即先按第一个字段进行分组,然后在第一个字段值相同的记录中,再根据第二个字段的值进行分组, 依次类推

示例:

依据公交线路所属公司和营运车辆数,分组统计平均营运里程:

select company 公司 , number 营运车辆数 , truncate(avg(miles),1) 平均营运里程 from line group by company, number

五 、总结

(1) count 和 sum 函数的区别:

sum 函数是对符合条件的记录的数值列求和,count 函数的值是满足查询条件的结果(或记录)个数。

count(column) 用于统计 column 列不为 null 的记录个数。

(2) 如何对查询结果进行过滤之后再分组统计:

先使用 where 子句表达式对查询结果进行过滤筛选。然后,再使用 group by 子句对 where 子句的输出进行分组统计。  

(3)having 子句的用法:

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据。

having 子句的位置放在 group by 子句之后,常包含聚合函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值