SQL汇总和分组数据.docVIP

  • 25
  • 0
  • 约8.46千字
  • 约 12页
  • 2017-08-10 发布于河南
  • 举报
SQL汇总和分组数据

使用聚合函数进行汇总和分组 SQL提供一组聚合函数,它们能够对整个数据集合进行计算,将一组原始数据转换为有用的信息,以便用户使用。例如求成绩表中的总成绩、学生表中平均年龄等。 SQL的聚合函数如表1所示。 表1 聚合函数 聚合函数 支持的数据类型 功 能 描 述 Sum(?) 数字 对指定列中的所有非空值求和 avg(?) 数字 对指定列中的所有非空值求平均值 min(?) 数字、字符、日期 返回指定列中的最小数字、最小的字符串和最早的日期时间 max(?) 数字、字符、日期 返回指定列中的最大数字、最大的字符串和最近的日期时间 count([distinct] *) 任意基于行的数据类型 统计结果集中全部记录行的数量,最多可达2?147?483?647行 count_big([distinct] *) 任意基于行的数据类型 类似于count(?)函数,但因其返回值使用了bigint数据类型,所以最多可以统计2^63-1行 ? 1.SUM(?)函数和AVG(?)函数 两个函数都是对列式数字型的进行计算,只不过SUM(?)是对列求和;而AVG(?)是对列求平均值。 示例: 求“grade”表中每学期的课程成绩的总和。在查询分析器中输入的SQL语句如下: use student select sum(课程成绩) as 总成绩 from grade 实现的过程如图1所示。 图1 求课程成绩的总和 当与GROUP BY子句一起使用时,每个聚集函数都为每一组生成一个值,而不是对整个表生成一个值。 示例: 在“student”表中,按“性别”分别求年龄的平均值。在查询分析器中输入的SQL语句如下: use student select 性别 ,avg(年龄) as 平均年龄 from student group by 性别 实现的过程如图2所示。 图2 男女生的平均年龄 2.MIN(?)函数和MAX(?)函数 MIN(?)和MAX(?)函数分别查询列中的最小值和最大值。但列的数据包含数字、字符或日期/时间信息。MIN(?)和MAX(?)函数结果与列中数据的数据类型完全相同。 示例: 查询“student”表中最早出生的学生。在查询分析器中输入的SQL语句如下: use student select min(出生日期) as 最早出生 from Student 实现的过程结果如图3所示。 图3 学生表中年龄最小的学生信息 下面把GROUP BY子句和MAX(?)函数结合使用。 示例: 在“student”表中,按“性别”分别求年龄的最大值。在查询分析器中输入的SQL语句如下: use student select 性别, max(年龄) as 最大年龄 from Student group by 性别 实现的过程如图4所示。 图4 男女生中年龄的最大值 3.COUNT(?)函数和COUNT_big(?)函数 COUNT(?)函数和COUNT_big(?)函数两个函数都是对列中数据值的数目进行计数。它们返回的值总是一个整数,不管列的数据类型。 示例: 求“student”表中女生的人数。在查询分析器中输入的SQL语句如下: use student select count(年龄) as 女生记录总数 from student where 性别=女 实现的过程如图5所示。 图5 “Student”表中女生的记录总数 COUNT(*)就可以求整个表所有的记录数。例如,求“student”表中所有的记录数,SQL语句如下: use student select count(*) from student 4.消除重复记录(DISTINCT) 指定DISTINCT关键字不但可以消除查询结果中的重复记录,而且在使用SUM(?)、AVG(?)和COUNT(?)聚合函数时,可以从列中消除重复的值。DISTINCT关键字和聚合函数使用的格式是:聚合函数名称(DISTINCT 列名)。 示例: 在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下: use student select count(学号) from grade 实现的过程如图6所示。 图6 统计参加考试的学生 从上面的统计结果不难看出,实际上参加考试的学生是学号从B001~B005共5名,其中有重复的学号。这样为了正确统计到底有多少学生参加考试,就必须用到关键字DISTINCT。 示例: 在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下: use student select count(dist

文档评论(0)

1亿VIP精品文档

相关文档