求解一道题,不难,急!分100,万谢
有三张表用如下代码创建:
create table xs(xh char(8),xm char(8),others char(100),primary key(xh));
create table kc(kch char(4),mc char(20),xf smallint,primary key(kch));
create table xk(xh char(8),kch char(4),cj decimal(4,1),primary key(xh,kch));
insert into xs values('00010001','zxx','......');
insert into xs values('00010002','lxx','......');
insert into xs values('00010003','wxx','......');
insert into xs values('00010004','qxx','......');
insert into kc values('0001','SQL Server 2000',3);
insert into kc values('0002','C++程序设计',4);
insert into kc values('0003','计算机基础',4);
insert into kc values('0004','人工智能',2);
insert into kc values('0005','数据结构',4);
insert into xk values('00010001','0001',89.5);
insert into xk values('00010001','0002',80.5);
insert into xk values('00010002','0004',89.5);
insert into xk values('00010001','0003',89.5);
insert into xk values('00010003','0005',89.5);
现在要求:按成绩的绩点从大到小给学生(就是xs表)的px列(此列要自己新设)填上值(绩点=∑(成绩×学分)/ ∑学分)
该怎么做?向各位请教!我在线上等。。。万分感谢。
问题点数:0、回复次数:21Top
1 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:29:07 得分 0
upTop
2 楼coco_tao(小琴)回复于 2004-12-03 22:31:53 得分 0
请问你会做吗?
Top
3 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:32:37 得分 0
绩点 是哪来的Top
4 楼coco_tao(小琴)回复于 2004-12-03 22:36:03 得分 0
绩点就是按照那个公式算出来的,然后把它填到px列中,不知道这样解释是否明白?Top
5 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:37:13 得分 0
= 号 啊 我这里看 是减号 呵呵Top
6 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:41:15 得分 0
你试试,我这里不能试
select a.xh,sum(a.cj*b.xf)/sum(b.xf)
from xk a,kc b
where a.kch=b.kch
group by a.xhTop
7 楼mschen(Co-ok)回复于 2004-12-03 22:47:47 得分 0
--这个可以吗?
update xs set px=t.绩点
from (select xk.xh,sum(xk.cj*kc.xf)/sum(kc.xf) 绩点 from xk join kc on xk.kch=kc.kch
group by xk.xh) t join xs on t.xh=xs.xhTop
8 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:50:46 得分 0
mschen(老陈) 写的好 我以为查询呢Top
9 楼lsxaa(小李铅笔刀)回复于 2004-12-03 22:54:36 得分 0
select a.xh,sum(a.cj*b.xf)/sum(b.xf) as 绩点
from xk a,kc b
where a.kch=b.kch
group by a.xh
order by 绩点 descTop
10 楼mschen(Co-ok)回复于 2004-12-03 22:57:25 得分 0
--添加新的列
alter table xs add px decimal(4,1)
--执行
update xs set px=t.绩点
from (select xk.xh,sum(xk.cj*kc.xf)/sum(kc.xf) 绩点 from xk join kc on xk.kch=kc.kch
group by xk.xh) t
join xs on t.xh=xs.xh
--测试结果
/*
xh xm others px
-------- -------- ---------------------------------------------------------------------------------------------------- ------
00010001 zxx ...... 86.2
00010002 lxx ...... 89.5
00010003 wxx ...... 89.5
00010004 qxx ...... NULL
(所影响的行数为 4 行)
*/
Top
11 楼coco_tao(小琴)回复于 2004-12-03 23:11:25 得分 0
非常感谢,我测试过了,能算出来Top
12 楼coco_tao(小琴)回复于 2004-12-03 23:16:34 得分 0
相比之下,老陈的解法更符合题目要求,当然也很感谢小李。这样吧,老陈给70,小李给30,可以吗?不知道两位觉得如何?Top
13 楼hdhai9451(☆新人类☆)回复于 2004-12-03 23:47:43 得分 0
恭喜!Top
14 楼vinsonshen(为了明天)回复于 2004-12-04 02:09:00 得分 0
学习下~~~Top
15 楼zhang_yzy(六子儿)回复于 2004-12-04 16:22:24 得分 0
感觉有些小问题,
若有的学生没有成绩记录那怎么处理的?Top
16 楼jackluo1981(无知者无畏)回复于 2004-12-04 18:06:44 得分 0
学习!Top
17 楼coco_tao(小琴)回复于 2004-12-04 20:45:11 得分 0
如果学生没成绩,应该在PX一列中写上“无成绩”之类的标识,那应该怎么加啊?Top
18 楼hdhai9451(☆新人类☆)回复于 2004-12-04 22:02:23 得分 0
那樣可不行呀,因為PX是數字類型,“无成绩”是字符串類型,同一列裡不能同時有數字類型和字符串類型一起Top
19 楼dazhu2(【倚天不出,谁与争锋】)回复于 2004-12-04 23:05:48 得分 0
学习Top
20 楼coco_tao(小琴)回复于 2004-12-05 00:16:25 得分 0
哦,谢谢指教Top
21 楼zgvslch(烟花离落)回复于 2004-12-05 00:36:23 得分 0
学习
Top




