标题:SQL语句
只看楼主
honrry
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2004-6-2
 问题点数:0 回复次数:2 
SQL语句
二维表 T(F1,F2,F3,F4,F5,F6,F7) 表示如下关系:

------------------------------------------------------------------------------

│  学生ID  │ 学生姓名 │  课程ID  │ 课程名称 │   成绩   │  教师ID  │ 教师姓名 │

│    S3    │   王五   │    K4    │   政治   │    53    │    T4    │  赵老师  │

│    S1    │   张三   │    K1    │   数学   │    61    │    T1    │  张老师  │

│    S2    │   李四   │    K3    │   英语   │    88    │    T3    │  李老师  │

│    S1    │   张三   │    K4    │   政治   │    77    │    T4    │  赵老师  │

│    S2    │   李四   │    K4    │   政治   │    67    │    T5    │  周老师  │

│    S3    │   王五   │    K2    │   语文   │    90    │    T2    │  王老师  │

│    S3    │   王五   │    K1    │   数学   │    55    │    T1    │  张老师  │

│    S1    │   张三   │    K2    │   语文   │    81    │    T2    │  王老师  │

│    S4    │   赵六   │    K2    │   语文   │    59    │    T1    │  王老师  │

│    S1    │   张三   │    K3    │   英语   │    37    │    T3    │  李老师  │

│    S2    │   李四   │    K1    │   数学   │    81    │    T1    │  张老师  │

│   ....   │          │          │          │          │          │          │

│   ....   │          │          │          │          │          │          │

------------------------------------------------------------------------------


1.简述规范化思路


  请以一句 T-SQL (Ms SQL Server) 或 Jet SQL (Ms Access) 作答

2.如果 T 表还有一字段 F0 数据类型为自动增量整型(唯一,不会重复),

  而且 T 表中含有除 F0 字段外,请删除其它字段完全相同的重复多余的脏记录数据:


3.列印各科成绩最高和最低的记录: (就是各门课程的最高、最低分的学生和老师)

  课程ID,课程名称,最高分,学生ID,学生姓名,教师ID,教师姓名,最低分,学生ID,学生姓名,教师ID,教师姓名


4.按成绩从高到低顺序,列印所有学生四门(数学,语文,英语,政治)课程成绩: (就是每个学生的四门课程的成绩单)

  学生ID,学生姓名,数学,语文,英语,政治,有效课程数,有效平均分

  (注: 有效课程即在 T 表中有该学生的成绩记录,如不明白可不列印"有效课程数"和"有效平均分")


5.按各科不及格率的百分数从低到高和平均成绩从高到低顺序,统计并列印各科平均成绩和不及格率的百分数(用"N行"表示): (就是分析哪门课程难)

  课程ID,课程名称,平均成绩,及格百分数


6.列印四门课程平均成绩和及格率的百分数(用"1行4列"表示): (就是分析哪门课程难)

  数学平均分,数学及格百分数,语文平均分,语文及格百分数,英语平均分,英语及格百分数,政治平均分,政治及格百分数


7.列印数学成绩第 10 名到第 15 名的学生成绩单

  或列印总成绩第 10 名到第 15 名的学生成绩单


8.按不同老师所教不同课程平均分从高到低列印: (就是分析哪个老师的哪个课程水平高)

  教师ID,教师姓名,课程ID,课程名称,平均分


9.统计列印各门课程成绩各分数段人数: (类似交叉报表)

  课程ID,课程名称,[100-85],[84-70],[69-60],[<60]




.删除其它字段完全相同的重复多余的脏记录数据


delete a

from t a,t b

where a.学生ID=b.学生ID and a.课程ID=b.课程ID and a.F0>b.F0


3.列印各科成绩最高和最低的记录


  select a.课程ID,a.课程名称,a.[成绩] as 最高分,a.[学生ID],a.[学生姓名],a.[教师ID],a.[教师姓名],

        b.[成绩] as 最低分,b.[学生ID],b.[学生姓名],b.[教师ID],b.[教师姓名]

  from t a,t b,(select 课程ID,max([成绩]) 最高分,min([成绩]) 最低分 from t group by 课程ID) c

  where a.[成绩]=c.最高分 and a.课程ID=c.课程ID and b.[成绩]=c.最低分 and b.课程ID=c.课程ID

  

4.按成绩从高到低顺序,列印所有学生四门(数学,语文,英语,政治)课程成绩


  select 学生id,

    max(case when 课程名称='数学' then 成绩 end) as '数学',

    max(case when 课程名称='语文' then 成绩 end) as '语文',

    max(case when 课程名称='英语' then 成绩 end) as '英语',

    max(case when 课程名称='政治' then 成绩 end) as '政治',

    count(成绩) as 有效课程数,

    (case when count(成绩)=0 then 0 else isnull(sum(成绩),0)/count(成绩) end)  as 有效平均分

  from t group by 学生ID

  order by 有效平均分 desc

 

5.按各科不及格率的百分数从低到高和平均成绩从高到低顺序


select 课程ID,max(课程名称) as 课程名称,left(avg(成绩),4) as 平均成绩,

   left(100.0* sum(case when 成绩 >=60 then 1 else 0 end)/count(课程ID) as 及格百分数

from t group by 课程ID

order by 及格百分数 desc,平均成绩 desc


6.列印四门课程平均成绩和及格率的百分数


select

   left(max(case when 课程ID = 'k1' then ac end),4) as 数学平均分,

   left(max(case when 课程ID = 'k1' then passperc end),4)  as 数学及格百分数,

   left(max(case when 课程ID = 'k2' then ac end),4)  as 语文平均分,

   left(max(case when 课程ID = 'k2' then passperc end),4)  as 语文及格百分数,

   left(max(case when 课程ID = 'k3' then ac end),4)  as 英语平均分,

   eft(max(case when 课程ID = 'k3' then passperc end),4)  as 英语及格百分数,

   left(max(case when 课程ID = 'k4' then ac end),4)  as 政治平均分,

   left(max(case when 课程ID = 'k4' then passperc end),4)  as 政治及格百分数

FROM

  (select 课程ID,left(avg(成绩),4) as ac,

  left(100.0* sum(case when 成绩 >=60 then 1 else 0 end)/count(成绩),4) as passperc

  from t group by 课程ID) a


7. 列印总成绩第 10 名到第 15 名的学生成绩单


 select top 6 学生ID, sum(成绩) as 总分  

 from t

 where 学生ID not in (select top 9 学生ID from t group by 学生ID order by sum(成绩) desc )

 group by 学生ID

 order by 总分 desc


8.按不同老师所教不同课程平均分从高到低列印


 select 教师ID,max(教师姓名),课程ID,max(课程名称) as 课程名称,avg(成绩) as 平均成绩

 from t

 group by 课程ID,教师ID

 order by avg(成绩) desc

 

9.统计列印各门课程成绩各分数段人数


select 课程ID,课程名称,

   count(case when 成绩<=100 and 成绩>=85 then 课程ID end) as '[100-85]',

   count(case when 成绩<=84 and 成绩>=70 then 课程ID end) as '[84-70]',

   count(case when 成绩<=69 and 成绩>=60 then 课程ID end) as '[69-60]',

   count(case when 成绩<60 then 课程ID end) as '[<60]'

from t

group by 课程ID,课程名称

搜索更多相关主题的帖子: SQL 语句 
2004-06-25 14:14
寒星
Rank: 1
等 级:新手上路
帖 子:455
专家分:0
注 册:2004-6-7
得分:0 
这是什么题阿?

http://www. 版主位置空缺
2004-06-25 15:57
regedit
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:950
专家分:0
注 册:2004-6-8
得分:0 
晕^^^^^^^^^^^^^^^

最新作品:百货品牌商品资讯第一门户([url]http://www./[/url]),欢迎交流
2004-06-25 17:54



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




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

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