| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 739 人关注过本帖
标题:请大家赐教,谢谢
取消只看楼主 加入收藏
胡桂生
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-14
收藏
 问题点数:0 回复次数:2 
请大家赐教,谢谢
我在学习数据库时遇到了一个困难,请大家帮帮忙:
下面创建了一个新表:
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
胡桂生
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
快速回复:请大家赐教,谢谢
数据加载中...
 
   



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

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