标题:请大家赐教,谢谢
只看楼主
胡桂生
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-14
 问题点数:0 回复次数:4 
请大家赐教,谢谢
我在学习数据库时遇到了一个困难,请大家帮帮忙:
下面创建了一个新表:
CREATE TABLE GradeTable
(
ID int IDENTITY(1,1) primary key,
StudentID VARCHAR(5) not null ,
StudentName VARCHAR(50),
CourseID VARCHAR(5) not null ,
CourseName VARCHAR(100),
Grade int,
TeacherID VARCHAR(5) not null ,
TeacherName VARCHAR(50)
)

下面向表中添加记录:
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S3','王五','K4','政治',53,'T4','赵老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S1','张三','K1','数学',61,'T1','张老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S2','李四','K3','英语',88,'T3','李老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S1','张三','K4','政治',77,'T4','赵老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S2','李四','K4','政治',67,'T4','周老师')
因为表中没有添加唯一性约束,我把上面记录中的前三行重新插入:
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S3','王五','K4','政治',53,'T4','赵老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S1','张三','K1','数学',61,'T1','张老师')
insert into GradeTable(StudentID,StudentName,CourseID,CourseName,Grade,TeacherID,TeacherName)
values('S2','李四','K3','英语',88,'T3','李老师')

问题:
现在表中有了一些重复的记录,请用查询分析器实现“统计每个学生的选课数和平均分” 重复的
记录是垃圾数据,怎样才能正确的实现呢?请大家不吝赐教!谢。

搜索更多相关主题的帖子: 记录 学习数据库 primary insert 
2007-09-20 20:09
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
使用Distinct关键字.

我的msn: myfend@
2007-09-20 20:18
wklhdt
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2006-5-23
得分:0 
使用Distinct关键字. 过滤掉重复的就可以了

2007-09-21 11:34
胡桂生
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-14
得分:0 
回复:(胡桂生)请大家赐教,谢谢
首先谢谢你们的回答。
这个问题我发了很久了,后来忙于其它课程的学习,没有及时的看到,说声抱歉。
我原来是这样写的:
select studentid,studentname,count(*) as 课程数,avg(grade) as 平均分
from gradetable
group by studentid,studentname
select * from gradetable
没有办法对冗余的数据进行处理,我就发了帖子,看了你们的建议后我试了试,我把select子句中的count(*)用count(distinct(CourseName)) 课程数这一列中的结果正确了,但是我不能把分数也这样做,因为分数是可以相同的,所以平均分还是不正确。
我后来和同学商量了下是这样做的:
delete from gradetable
where id in (select a.id from GradeTable a,GradeTable b where a.CourseID=b.CourseID
and a.StudentID=b.StudentID and a.ID>b.ID ) 把冗余的数据删除。
不知道有没有更好的办法?
2007-10-08 23:16
胡桂生
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-14
得分:0 
回复:(purana)使用Distinct关键字.
首先谢谢你们的回答。
这个问题我发了很久了,后来忙于其它课程的学习,没有及时的看到,说声抱歉。
我原来是这样写的:
select studentid,studentname,count(*) as 课程数,avg(grade) as 平均分
from gradetable
group by studentid,studentname
select * from gradetable
没有办法对冗余的数据进行处理,我就发了帖子,看了你们的建议后我试了试,我把select子句中的count(*)用count(distinct(CourseName)) 课程数这一列中的结果正确了,但是我不能把分数也这样做,因为分数是可以相同的,所以平均分还是不正确。
我后来和同学商量了下是这样做的:
delete from gradetable
where id in (select a.id from GradeTable a,GradeTable b where a.CourseID=b.CourseID
and a.StudentID=b.StudentID and a.ID>b.ID ) 把冗余的数据删除。
不知道有没有更好的办法?
2007-10-08 23:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-171627-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100751 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved