欢迎来到天天文库
浏览记录
ID:50993352
大小:214.00 KB
页数:12页
时间:2020-03-08
《SQL汇总和分组数据.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、使用聚合函数进行汇总和分组SQL提供一组聚合函数,它们能够对整个数据集合进行计算,将一组原始数据转换为有用的信息,以便用户使用。例如求成绩表中的总成绩、学生表中平均年龄等。SQL的聚合函数如表1所示。表1聚合函数聚合函数支持的数据类型功能描述Sum( )数字对指定列中的所有非空值求和avg( )数字对指定列中的所有非空值求平均值min( )数字、字符、日期返回指定列中的最小数字、最小的字符串和最早的日期时间max( )数字、字符、日期返回指定列中的最大数字、最大的字符串和最近的日期时间count([distinct]*)任意基于
2、行的数据类型统计结果集中全部记录行的数量,最多可达2 147 483 647行count_big([distinct]*)任意基于行的数据类型类似于count( )函数,但因其返回值使用了bigint数据类型,所以最多可以统计2^63-1行 1.SUM( )函数和AVG( )函数两个函数都是对列式数字型的进行计算,只不过SUM( )是对列求和;而AVG( )是对列求平均值。示例:求“grade”表中每学期的课程成绩的总和。在查询分析器中输入的SQL语句如下:usestudentselectsum(课程成绩)as总成绩fromgr
3、ade实现的过程如图1所示。图1求课程成绩的总和当与GROUPBY子句一起使用时,每个聚集函数都为每一组生成一个值,而不是对整个表生成一个值。示例:在“student”表中,按“性别”分别求年龄的平均值。在查询分析器中输入的SQL语句如下:usestudentselect性别,avg(年龄)as平均年龄fromstudentgroupby性别实现的过程如图2所示。图2男女生的平均年龄2.MIN( )函数和MAX( )函数MIN( )和MAX( )函数分别查询列中的最小值和最大值。但列的数据包含数字、字符或日期/时间信息。MIN(
4、 )和MAX( )函数结果与列中数据的数据类型完全相同。示例:查询“student”表中最早出生的学生。在查询分析器中输入的SQL语句如下:usestudentselectmin(出生日期)as最早出生fromStudent实现的过程结果如图3所示。图3学生表中年龄最小的学生信息下面把GROUPBY子句和MAX( )函数结合使用。示例:在“student”表中,按“性别”分别求年龄的最大值。在查询分析器中输入的SQL语句如下:usestudentselect性别,max(年龄)as最大年龄fromStudentgroupby性别
5、实现的过程如图4所示。图4男女生中年龄的最大值3.COUNT( )函数和COUNT_big( )函数COUNT( )函数和COUNT_big( )函数两个函数都是对列中数据值的数目进行计数。它们返回的值总是一个整数,不管列的数据类型。示例:求“student”表中女生的人数。在查询分析器中输入的SQL语句如下:usestudentselectcount(年龄)as女生记录总数fromstudentwhere性别='女'实现的过程如图5所示。图5“Student”表中女生的记录总数COUNT(*)就可以求整个表所有的记录数。例如,
6、求“student”表中所有的记录数,SQL语句如下:usestudentselectcount(*)fromstudent4.消除重复记录(DISTINCT)指定DISTINCT关键字不但可以消除查询结果中的重复记录,而且在使用SUM( )、AVG( )和COUNT( )聚合函数时,可以从列中消除重复的值。DISTINCT关键字和聚合函数使用的格式是:聚合函数名称(DISTINCT列名)。示例:在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下:usestudentselectcount(学号)fr
7、omgrade实现的过程如图6所示。图6统计参加考试的学生从上面的统计结果不难看出,实际上参加考试的学生是学号从B001~B005共5名,其中有重复的学号。这样为了正确统计到底有多少学生参加考试,就必须用到关键字DISTINCT。示例:在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下:usestudentselectcount(distinct学号)fromgrade实现的过程如图7所示。图7使用DISTINCT关键字统计参加考试的学生注意:当使用DISTINCT关键字时,聚合函数的参数必须是一个简
8、单的列名。筛选分组结果用GROUPBY可以实现数据分组操作,但有时用户不需要对数据表中所有的数据进行分组,这时就需要使用HAVING子句来筛选分组。示例:在“grade”表中,查询参加同一门课程考试的同学至少两个人的课程成绩总和。在查询分析器中输入的SQL语句如
此文档下载收益归作者所有