日期:2014-05-19  浏览次数:20469 次

找champion寻champion
请问如何找出某个项目冠军的名字,
如何找出总积分最高的系名。
因为比较难,我认为,所以我只好借助视图。可如
create   view   champion
as  
select   项目编号,max(积分)
from   成绩
group   by   项目编号
却不能找出运动员编号。

create   table   运动员
( 运动员编号   char(4)primary   key   ,
运动员姓名   char(20)   not   null,
运动员性别   char(2)check   (运动员性别   in( '男 ', '女 ')),
所属系名   char(20)   not   null
)

create   table   项目
( 项目编号   char(4)primary   key,
项目名称   char(20),
项目比赛地点   char(10)
)

create   table   成绩
( 运动员编号   char(4),
项目编号   char(4),
积分   smallint   check(积分   in(6,4,2,0)),
primary   key(运动员编号,项目编号),
foreign   key   (运动员编号)   references   运动员(运动员编号)
on   update   cascade
on   delete   cascade,
foreign   key   (项目编号)   references   项目(项目编号)
on   update   cascade
on   delete   cascade
)


------解决方案--------------------
--先创建这样一个视图vi
create view vi
as
select c.项目编号
,x.项目名称
,c.运动员编号
,y.运动员名称
,y.运动员性别
,y.所属系名
,c.积分
from 成绩 c join 运动员 y
on c.运动员编号=y.运动员编号
join 项目 x
on c.项目编号=x.项目编号

--某个项目冠军的名字,比如“男子跳高”
select 运动员姓名
from vi
where 积分=(select max(积分) from vi where 项目名称= '跳高 ' and 运动员性别= '男 ')