(一)聚合函数是指对列上的数据进行操作,起到统计的作用。前面的函数都是最一行记录进行操作得到的数据,包括前面的日期函数、数学函数、字符函数、转换函数以及条件判断函数。

常用的聚合函数有:count、sum、avg、max、min。这5个函数个起到统计记录数、求和、求平均值、求最大值、最小值的作用。

Count:count函数对查询的数据统计记录数量,这个函数不对字段值为NULL的值进行统计,也就是说某个查询的字段有NULL值,则NULL值的数量会被减除,这样就可以不对NULL设置查询条件了。

如果要对NULL值设置查询,则可以用WHERE 字段 IS NULL来作为条件。

Sum:sum函数求和,只能对数值型数据操作,也会忽略NULL值。举例:

Select sum(考试成绩) as 计算机总成绩

From score 

Where 课号 in (select 课号 from course where 课名=”计算机”)

Avg:求平均值,参数也必须为数值型字段名或者结果为数值的表达式。

Max、min:这两个函数求最大值和最小值,但是不能放到WHERER中以及SELECT子句的字段名位置上。

例:select max(x1) from y where max(x2) in(select…) 错误的语法。

            Select x1 from y where x2=max(x3) 错误的语法。

select max(x1) from y where x2) in(select max(x2,)…) 正确。

注:5个函数都可以使用distinct统计不重复的值:

Select count(distinct(课程)) as 课程数量 from 课程表

Access和mysql不能将distinct放置到参数中,解决方法:查询distinct保存为新表INTO语句,然后再使用count。

 

(二)数据分组是指将数据表中的数据按照指定字段的不同值分为很多组,使用group by 子句进行操作。

Group by通常不直接查询所有字段并且分组,group by和select后分组字段和查询字段通常一致。因为select * from y group by x 会产生错误,通常对某个字段分组并且利用聚合函数计算分组得到的值。

聚合函数和分组的组合并设置查询条件:可以对一个字段分组并且设定条件,这样得到的结果将会是计算分组并且满足条件的值。例:

查询各个所属院系中所有男生的值:

Select 所属院系,count(*)  as 男生人数from student where 性别=’男’ group by 所属院系

查询直方图:利用replicate()函数,将分组得到的数据作为次数,重复一个设置的符号。

排序查询结果:order by语句,ASC、DESC 位于group by之后

Case表达式和group by的结合:

Select 所属院系,count(case 

When 性别=’男’ then 1

Else null

End ) as 男生人数,

count(case 

When 性别=’女’ then 1

Else null

End ) as 女生人数

From student group by 所属院系

Hanving子句设置分组group by的分组查询条件。

Having子句总是和group by子句结合使用,依赖于分组,可以在having中使用聚合函数;where 也可以设定条件,但是不依赖于分组的字段,但是不能使用聚合函数。

Select 学号,sum(考试成绩) as 考试总成绩 from score group by 学号 having sum(考试成绩)>400 order by 考试总成绩 desc