MySQL聚合函数和分组查询

本文详细介绍了SQL中的聚合函数,如SUM、MAX、MIN、AVG和COUNT,以及它们在统计和分析数据中的应用。同时,讲解了GROUP BY子句的使用,包括多字段分组、HAVING子句进行分组后的筛选以及WITH ROLLUP选项实现汇总计算。还对比了WHERE和HAVING子句的区别,并强调了在使用GROUP BY时非聚合函数列的注意事项。
摘要由CSDN通过智能技术生成

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

 函数名称

功能

 sum

返回选取的某列值的总和

 max

返回选取的某列的最大值

 min

返回选取的某列的最小值

 avg

返回选取的某列的平均值

 count

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

1. group by 子句

2.创建分组

3.比较 order by 和 group by

4.使用 where 子句实现分组之前过滤数据

5.分组函数中的非聚合函数列

使用 group by 子句可以将数据划分到不同的组中,实现对记录的分组查询。group by 从英文字面的意义上可以理解为“根据(by)一定的规则进行分组(group)”,该子句的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对这若干个小区域进行统计汇总。

语法:group by 字段列表 [having 条件表达式 ] 

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

 

比较 order by 和 group by

使用 where 子句实现分组之前过滤数据

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

出现上述查询逻辑错误的原因在于:lineNo 为非聚合函数列,但却不是分组列字段。所以, 当我们在使用 group by 子句进行分组查询时,出现在 select 子句中的非聚合函数列一定要出现在 group by 子句的分组字段列表当中。

 

多字段分组

示例:select model 型号 , type 类型 , count(*) 车辆数 from vehicle group by model, type

使用 having 指定分组后的筛选条件

{having 子句的作用是筛选满足条件的组,即在分组之后过滤数据。having 子句的位置放在 group by 子句之后,常包含聚合函数。}

示例:select company 公司 , max(miles) 最长线路里程 from line group by company having max(miles)>24 order by max(miles)

比较 where 子句和 having 子句

having 子句和 where 子句均用于过滤数据,两者的区别在于:where 子句对结果集进行过滤筛选,而 having 子句则对分组的结果进行筛选。

group by 子句的 with rollup 选项

group by 子句将结果集分为若干个组,使用聚合函数可以对每个组内的数据进行信息统计,有时对各个组进行汇总计算时,需要在分组之后再加上一条汇总记录,这个任务可以通过 with rollup 选项来实现。

示例:select company 公司 , count(*) 线路数 from line  group by company with rollup

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值