聚合函数用于对一组值进行计算并返回一个汇总值,使用聚合函数可以统计记录行数、计算某个字段值的总和以及这些值的最大值、最小值和平均值等。
函数名称 | 功能 |
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