注册 登录
编程论坛 SQL Server论坛

帮我看下,这题我这样写不知道有没有对

smltq 发布于 2008-06-12 21:25, 1477 次点击
某班级的学生成绩表包含列“学号”、列“课程代号”、列“成绩”、列“学期号”,
1)请统计学期号为“第三学期”的每个学生所有科目的平均成绩。

select avg(成绩) from 成绩表 where 学期号=3 group by 学号,课程代号
8 回复
#2
smltq2008-06-12 21:48
这三题我总感觉有点问题……又没答案,高人帮我看下哪有问题谢谢!
某班级的学生成绩表包含列“学号”、列“课程代号”、列“成绩”、列“学期号”,
1)请统计学期号为“第三学期”的每个学生所有科目的平均成绩。
2)现在想评定该班级第二学年(包括第三学期和第四学期)的优秀学生奖学金,要求从该班级选出平均成绩排前5名的同学。请用SELECT语句显示这些同学的学号和平均成绩。(要考虑可能有多个同学并列第5名)
3)学校规定前三学年(第一学期到第六学期)总平均分在90分以上而且没有一次考试不及格(成绩>=60分)的同学可以参加学校最高级别的评奖。请用SELECT语句显示该班级中满足评奖条件的候选人的学号和前三学年的总平均分。
1)select avg(成绩) from 成绩表 where 学期号=3 group by 学号,课程代号
2)select top 5 with ties * from 成绩表 order by avg(成绩)
3) select 学号,avg(成绩) from 成绩表 where avg(成绩)>90 and 成绩>=60 and 学期号<=6 group by 学号
#3
smltq2008-06-13 12:48
#4
bb38522008-06-14 13:05
1)看起来没什么语法错误,应该对的
2)3)是错的,where 字句不能直接用avg函数
#5
provoke2008-06-14 20:28
1:
select avg(成绩) from 成绩表 where 学期号=3 group by 学号,课程代号

不需要课程代号了;

2:
order by avg(成绩)

order by 默认是升序排列的;

3:
select 学号,avg(成绩) from 成绩表 where avg(成绩)>90 and 成绩>=60 and 学期号<=6 group by 学号

这样并没排除有不及格科目的学生,只是忽略了不及格的科目。考虑一个特殊情形:学生A有两门课程,分别是59分和91分,那么学生A也满足上述条件。

select 学号,avg(成绩) from 成绩表 where 学号 not in (select disctinct 学号 from 成绩表 where 成绩<60) group by 学号 having avg(成绩)>90

“没有一次考试不及格”,也就是学号不在“有不及格科目”的学号集合中。

[[it] 本帖最后由 provoke 于 2008-6-14 20:38 编辑 [/it]]
#6
smltq2008-06-14 23:56
原来可以用子查询解决这问题啊,我就感觉嘛有点问题,可就发现不了,楼上的两位大大谢谢啦
#7
smltq2008-06-15 01:26
select 学号,avg(成绩) from 成绩表 where 学号 not in (select disctinct 学号 from 成绩表 where 成绩<60) group by 学号 having avg(成绩)>90
--和里的having 和where可以一起出现吗?
#8
smltq2008-06-16 22:52
#9
jxyga1112008-06-17 11:16
你再和GROUP BY
1