这次我们了解一下分组函数,描述一下分组函数的用途,使用group by 字句对数据分组和使用having字句过滤分组结果集。
首先要知道什么是分组函数?
分组函数作用于一组数据,并对一组数据返回一个值。
说一下分组函数类型:
Avg
Count
Max
MinStddey
Sum
先说avg( 平均值 ) 和 sum ( 合计 ) 函数
可以对数值型数据使用avg 和sum函数,如:
查询某班成绩平均值: select avg(degree) from score;
查询某班总成绩分数: select sum(degree) from score;
然后是min ( 最小值 ) 和max ( 最大值 ) 函数
可以对任意数据类型的数据使用min和max函数的
如查询某班最高成绩:select max(degree) from score;
如查询某班最低成绩:select min(degree) from score;
Count(计数)函数
Count ( * ) 返回表中记录总数,适用于任意数据类型。
如果说我突然想知道某学校的人数,就可以在此用到了,如下:
select count(*) from score
注意:count ( expr ) 返回expr 不为空的记录总数。
而且组函数忽略空值。
在组函数中使用nvl函数
Nvl函数使分组函数无法忽略空值。
Distinct 关键字
Count ( distinct expr ) 返回expr 非空且不重复的记录总数
如:select count(distinct degree) from score;
分组数据
分组数据: group by 字句语法
可以使用 group by 字句将表中的数据分成若干组,如下:
select sno from score
group by sno;
在select 列表中使用未包含在组函数中的列都应该包含在group by 字句中。
select sno, avg(degree) from score
group by sno;
注意:包含在group by 字句中的列表不必包含在select 列表中
使用多个列分组
在group by 字句中包含多个列
select sno, cno from score
group by sno,cno;
非法使用组函数
所有包含于select 列表中,而未包含于组函数中的列都必须包含于 group by 字句中,
不能在 where 字句中使用组函数,可以在havinc 字句中使用组函数。
过滤分组:having 字句
使用having 过滤分组:
1.行已被分组
2.使用了组函数
3.满足having 字句中条件的分组将被显示
select max(degree)
from score
having max(degree)>70;