数据分组与汇总
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本次的实验,我之前有简单的预习,实验时在教员和同学的帮助下, 我比较顺利的在课上完成了实验。但是也暴露一些问题:
1.上课时听课不够仔细,对于教员强调过的重点内容掌握不牢靠。 2.课后复习还不到位,总是走马观花的看一遍,并没有真正把上课的 所学知识巩固好。 3.比较局限于教员所讲的知识,没有很好的利用借阅的课外书。 在今后的学习过程中,我会努力改进以上不足之处。
2-7 查询至少选修了2门课程(含2门)的学生的学 号和平均成绩,并根据平均成绩降序排序
select Sno as 学号 , avg(score) as 平均成绩 from SC group by sno having count(Sno) >=2 order by avg(score) desc
2-10 查询人数多于2人(含2人)的系的编号及人数
select Dno, count(Sno) as 人数 from Student group by Dno having count(Sno)>=2
2-11 查询学生成绩表(sc),以及每个学生的所有 课程的总成绩 <方法一>
select Sno,sum(Score) as 总成绩 from SC group by Sno
2-3 求每门课程的平均成绩
select Cno,avg(Score) as 平均成绩 from SC group by Cno
2-4 求平均成绩大于85分的学生的学号及平均成绩
select Sno,avg(Score) as 平均成绩 from SC group by Sno having avg(Score)>=85
2-5 求平均成绩大于85分的课程的课程号及课程平 均成绩
select Cno as 课程号 , avg(Score) as 平均成绩 from SC group by Cno having avg(Score)>=85
2-6 求各个课程号及相应的选课人数
select Cno as 课程号, count(*) as 选课人数 from SC group by Cno
实验四 数据分组与汇总
实
验
实
内
验
容
目
的
问
题
及
解 决 办 法
心 得 体 会
一、实验目的
• 掌握数据分组查询的方法。 • 掌握统计函数的使用。 • 使用GROUP BY和HAVING子句对数据进行分组
查询。 • 使用相应的运算符或子句生成汇总数据。
二、实验内容
1-1 查询学生的总人数
select count(Sno) as 总人数 from Student
2-11 查询学生成绩表(sc),以及每个学生的所有 课程的总成绩 <方法二>
select Sn,sum(Score) as 总成绩 from SC join Student on Student.Sno=SC.Sno group by Sn
三、实验中遇到的问题与解决方法
问题一:在实验中出现如图语法错误,导致查询不能进行
解决办法:在向教员询问之后,知道GROUP BY分组依据列。
若根据函数结果排序,需要用ORDER BY语句。并且它是与聚合 函数成对出现的。
三、实验中遇到的问题与解决方法
问题二:在实验过程中刚开始对于GROUP BY、HAVING以及
ORDER BY各语句的意义并不是十分清楚。
解决办法:通过看书、上网查询,基本了解它们各自的意
解决办法:通过查询资料,找到查询并列的语句是with
ties.在with ties之后写上要查询的列名,这样就可以显示 并列的成绩了。同时,在实验中由于我没有加上desc,导 致排出的成绩被默认为“后三名”。
四、实验心得与体会
每一次的实验我都觉得很有意思,因为每当自己写出正确的语句,查 到想要的数据时,我都感觉很有成就感。虽然现在才仅仅学到是SQL 2005的皮毛,但是目前为止我还是很感兴趣的。
select top 3 with ties * from SC order by Score desc
2-1 求有成绩的每个学生的平均成绩
select Sno,avg(Score) as '平均成绩' from SC group by Sno
2-2 求有成绩的每个学生的总成绩
select Sno,sum(Score) as '总成绩 ' from SC where Score is not NULL group by Sno
1-2 查询选修了课程的学生人数
select distinct count(Cno) as 选课人数 from SC
1-3 计算选修2号课程的学生的平均成绩
select avg (Score) as 平均成绩 from SC where Cno='150102'
1-4 查询选修3号课程的学生的最高分数
义。刚开始以为GROUP BY语句也是分组,所以想当然的把 它当做ORDER BY来使用,但是它是分组的依据而已,一般 与SELECT后的第一个列名相同,HAVING是在GROUP BY中加 入符合的条件。ORDER BY顾名思义就是表示排序的语句。
三、实验中遇到的问题与解决方法
问题三:在实验的1-6中遇到在查询“成绩并列”的情况
select top 1 score as 最高分数 from SC where Cno='150103'
பைடு நூலகம்
1-5 求成绩排名前三名的学生号、课程号、成绩
select top 3 Sno,Cno,Score from SC order by score desc
1-6 求成绩排名前三名的学生号、课程号、成绩 (包括成绩并列情况)
2-8 查询各学分等级的课程号
select Xf, count(Xf) as 总人数 from C group by Xf
2-9 查询18岁以上(含18岁)的男、女生的人数
select count(Sno) as 人数,Age,Sex from Student group by Age,Sex having Age>=18