SQL汇总和分组数据

上传人:汽*** 文档编号:508997657 上传时间:2023-03-12 格式:DOCX 页数:11 大小:208.04KB
返回 下载 相关 举报
SQL汇总和分组数据_第1页
第1页 / 共11页
SQL汇总和分组数据_第2页
第2页 / 共11页
SQL汇总和分组数据_第3页
第3页 / 共11页
SQL汇总和分组数据_第4页
第4页 / 共11页
SQL汇总和分组数据_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《SQL汇总和分组数据》由会员分享,可在线阅读,更多相关《SQL汇总和分组数据(11页珍藏版)》请在金锄头文库上搜索。

1、使用聚合函数进行汇总和分组SQL提供一组聚合函数,它们能够对整个数据集合进行计算,将一组原始数据转换为有 用的信息,以便用户使用。例如求成绩表中的总成绩、学生表中平均年龄等。SQL的聚合函数如表1所示。表1聚合函数聚合函数支持的数据 类型功能描述Sum()数字对指定列中的所有非空值求和avg()数字对指定列中的所有非空值求平均值min()数字、字符、日期返回指定列中的最小数字、最小的字符串和最早 的日期时间max()数字、字符、日期返回指定列中的最大数字、最大的字符串和最近 的日期时间count ( distinct*)任意基于行的数据类型统计结果集中全部记录行的数量,最多可达2 147 48

2、3 647 行count_big(distinct *)任意基于行的数据类型类似于count()函数,但因其返回值使用了 bigint 数据类型,所以最多可以统计2人63-1行1. SUM()函数和AVG()函数两个函数都是对列式数字型的进行计算,只不过SUM()是对列求和;而AVG()是对列 求平均值。示例:求“grade”表中每学期的课程成绩的总和。在查询分析器中输入的SQL语句如下:use studentselect sum(课程成绩)as总成绩from grade实现的过程如图1所示。|学号1课程代号1课程成统1学期 1B005KLI295.22B0LI3k0398.31_ 2 1 总

3、成绩_ ELI03k03S8.31 L,/ 1556. 80.BLILI4k0439.92)B002k0292.42佥询后_BOLI1KLU92.71询前图1求课程成绩的总和当与GROUP BY子句一起使用时,每个聚集函数都为每一组生成一个值,而不是对整 个表生成一个值。示例:在“student”表中,按“性别”分别求年龄的平均值。在查询分析器中输入&01语句如下:use studentselect性别,avg(年龄)as平均年龄from student group by ,性另 U实现的过程如图2所示。学号I姓名 I性别I年龄T出生日期I联系方式I男男女女女女 伟 葱葱白 大导月小葱小 刘李

4、刘李李李3 6 1 2 4 5 _u n- n- _u _u -U o o o o o O E B b B E B20 1986-01-0113451性别平均年龄Q 1男.201 2女.22詹询后20 1986-01-032345121 1985-03-035234522 1984-03-1062345221984-03-1023451241982-03-0382345建询前图2男女生的平均年龄2. MIN()函数和MAX()函数MIN()和MAX()函数分别查询列中的最小值和最大值。但列的数据包含数字、字符或 日期/时间信息。MIN()和MAX()函数结果与列中数据的数据类型完全相同。示例:

5、查询“student”表中最早出生的学生。在查询分析器中输入的SQL语句如下:use studentselect min(出生日期)as最早出生from Student实现的过程结果如图3所示。图3学生表中年龄最小的学生信息下面把GROUP BY子句和MAX()函数结合使用。示例:在“student”表中,按“性别”分别求年龄的最大值。在查询分析器中输入&01语句如 下:use studentselect性别,max(年龄)as最大年龄from Studentgroup by 性别实现的过程如图4所示。学号|姓名 |性别|年龄T出生日期|联系方式B0LI3 刘大伟201986-01-016 1

6、 2 4 5 o o o o o o o o o o E TD E E B男女1345120 1986-01-032345121 1985-03-035234522 1984-03-106234522IdS-LiS-lLi23451241902-03-03S2345性别最大年龄1男.202女.24查询后图4男女生中年龄的最大值3. COUNT()函数和 COUNT_big()函数COUNT()函数和COUNT_big()函数两个函数都是对列中数据值的数目进行计数。它们 返回的值总是一个整数,不管列的数据类型。示例:求“student”表中女生的人数。use studentselect coun

7、t(年龄)as女生记录总数from studentwhere性别=女实现的过程如图5所示。学号I姓名 I性别 I年龄I出生日期I联系方式B0LI3 刘大伟201986-01-01BLILI6 bOOlB002:004 B0LI5李导 刘月 李小葱 李葱葱 李小白2L2122既241986-01-031985-03-031984-03-101984-03-101982-03-03134512345152345623452345182345苦询前)图5“Student”表中女生的记录总数COUNT (*)就可以求整个表所有的记录数。例如,求“student”表中所有的记录数,SQL语句如下:use

8、 studentselectfrom student4.消除重复记录(DISTINCT)指定DISTINCT关键字不但可以消除查询结果中的重复记录,而且在使用SUM( )、AVG() 和COUNT()聚合函数时,可以从列中消除重复的值。DISTINCT关键字和聚合函数使用的 格式是:聚合函数名称(DISTINCT列名)。示例:在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下:use studentselectcount(学号)from实现的过程如图6所示。学号课程代号1课程成绩学期 1E005K0295.22E003kH390. 31B003k3388. 31EL

9、I0489. 92B00292.42BLILHKLU92.71适询前(无列名)I16詹询后图6统计参加考试的学生从上面的统计结果不难看出,实际上参加考试的学生是学号从B001B005共5名,其 中有重复的学号。这样为了正确统计到底有多少学生参加考试,就必须用到关键字 DISTINCT o示例:在“grade”表中,统计多少学生参加考试。在查询分析器中输入的SQL语句如下:use studentselect count(distinct 学号)from实现的过程如图7所示。图7使用DISTINCT关键字统计参加考试的学生注意:当使用DISTINCT关键字时,聚合函数的参数必须是一个简单的列名。筛

10、选分组结果用GROUP BY可以实现数据分组操作,但有时用户不需要对数据表中所有的数据进行 分组,这时就需要使用HAVING子句来筛选分组。示例:在“grade”表中,查询参加同一门课程考试的同学至少两个人的课程成绩总和。在查 询分析器中输入的SQL语句如下:use studentselect课程代号,sum(课程成绩)as课程总成绩from gradegroup by课程代号having count(*)=2实现的过程如图1所示。图1至少两个人对加同一门考试的课程成绩总和1. SQL SELECT语句的执行顺序下面给出SQL SELECT语句的执行顺序。(1) FROM子句组装来自不同数据源

11、的数据。(2) WHERE子句基于指定的条件对记录行进行筛选。(3) GROUP BY子句将数据划分为多个分组。(4) 使用聚集函数进行计算。(5) 使用HAVING子句筛选分组。(6) 计算所有的表达式。(7) 使用ORDER BY对结果集进行排序。示例:在“ grade ”表中,把“学号”内容不为空的记录按照“学号”分组,并且筛选分组结 果,选出“课程成绩”大于92的学生信息。在查询分析器中输入的SQL语句如下:use studentselect学号,avg(课程成绩)as平均成绩from gradewhere学号 is not nullgroup by 学号having avg(课程成绩

12、)92 order by平均成绩实现的过程如图2所示。学号1课程代号1课程成蜻1学期BLI05KLI295. 22BLI03kON98. 31BLI03ldJ388. 31BLI04ldJ489. 92BLI02ldJ292. 42BLIO1KLU92.71爸询前学号平均成绩1B00292.40.2B00192.70.3BOOS93. 29.4B00595. 20.笛询后图2 查询统计“student”表下面给出上个示例中SQL语句的执行顺序。(1)首先执行FROM子句,从“grade”表组装数据源的数据。(2)执行WHERE子句,筛选“grade”表中所有数据不为NULL的数据。(3)执行G

13、ROUP BY子句,把“grade”表按“学号”列进行分组。(4)计算AVG()聚集函数,按“课程成绩”求出平均成绩的具体数值。(5)执行HAVING子句,筛选课程的平均成绩大于92分的学生信息。(6)执行ORDER BY子句,把最后的结果按“平均成绩”进行排序。2. HAVING子句在分组搜索条件上的限制HAVING子句指定的搜索条件必须是作为一个整体应用于组而不是应用于各个记录。所 以HAVING的搜索条件是有限制的,列举如下: 一个常量。.一个聚合函数,这个聚合函数生成一个值,该值汇总组中的记录。 一个分组列,按照定义,这个分组字段在这个组的每一记录中有同样的值。 一个包含上述各项组合的表达式。示例:在“ grade ”表中,按“学期”分组,求“学期”值不为空的课程成绩平均值。在查询 分析器中输入的SQL语句如下:use studentselect avg(课程成绩)as 平均成绩from gradegroup by 学期having 学期 is not null实现的过程如图3所示。图3求“grade”表中按“学期”分组的平均成绩示例:在“ grade ”表中,按“课

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号