sql统计-关于学生成绩

 

学生成绩表(stuscore):

姓名:name

课程:subject

分数:score

学号:stuid

张三

数学

89

1

张三

语文

80

1

张三

英语

70

1

李四

数学

90

2

李四

语文

70

2

李四

英语

80

2

ContractedBlock.gif ExpandedBlockStart.gif 创建表
None.gifSET ANSI_NULLS ON
None.gif
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON
None.gif
None.gif
GO
None.gif
None.gif
SET ANSI_PADDING ON
None.gif
None.gif
GO
None.gif
None.gif
CREATE TABLE [dbo].[stuscore](
None.gif
None.gif    
[name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
None.gif
None.gif    
[subject] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
None.gif
None.gif    
[score] [int] NULL,
None.gif
None.gif    
[stuid] [int] NULL
None.gif
None.gif
ON [PRIMARY]
None.gif
None.gif 
None.gif
None.gif
GO
None.gif
None.gif
SET ANSI_PADDING OFF

None.gif

问题:

1.    计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)

2.    计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩)

3.    计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩)

4.    计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)

5.    列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)

6.    列出各门课程成绩最好的两位学生(要求显示字段: 学号,姓名,科目,成绩)

7.    统计如下:

学号

姓名

语文

数学

英语

总分

平均分

 

 

 

 

 

 

 

 

8.列出各门课程的平均成绩(要求显示字段:课程,平均成绩)

9.列出数学成绩的排名(要求显示字段:学号,姓名,成绩,排名)

10.列出数学成绩在2-3名的学生(要求显示字段:学号,姓名,科目,成绩)

11.求出李四的数学成绩的排名

12.统计如下:

课程

不及格(0-59)个

良(60-80)个

优(81-100)个

 

 

 

 

  

 

13.统计如下:数学:张三(50分),李四(90分),王五(90分),赵六(76分)

答案:

1.       计算每个人的总成绩并排名

None.gif select  name, sum (score)  as  allscore  from  stuscore  group   by  name  order   by  allscore
None.gif
None.gif

2.   计算每个人的总成绩并排名

None.gif select   distinct  t1.name,t1.stuid,t2.allscore  from   stuscore t1,
None.gif
None.gif(
None.gif
None.gif    
select  stuid, sum (score)  as  allscore  from  stuscore  group   by  stuid
None.gif
None.gif)t2
None.gif
None.gif
where  t1.stuid = t2.stuid
None.gif
None.gif
order   by  t2.allscore  desc
None.gif

3. 计算每个人单科的最高成绩

None.gif   select  t1.stuid,t1.name,t1.subject,t1.score  from  stuscore t1,
None.gif
None.gif(
None.gif
None.gif
select  stuid, max (score)  as  maxscore  from  stuscore  group   by  stuid
None.gif
None.gif) t2
None.gif
None.gif
where  t1.stuid = t2.stuid  and  t1.score = t2.maxscore
None.gif

4.计算每个人的平均成绩

None.gif select   distinct  t1.stuid,t1.name,t2.avgscore  from  stuscore t1,
None.gif
None.gif(
None.gif
None.gif
select  stuid, avg (score)  as  avgscore  from  stuscore  group   by  stuid
None.gif
None.gif) t2
None.gif
None.gif
where  t1.stuid = t2.stuid
None.gif

5.列出各门课程成绩最好的学生

None.gif select   t1.stuid,t1.name,t1.subject,t2.maxscore  from  stuscore t1,
None.gif
None.gif(
None.gif
None.gif
select  subject, max (score)  as  maxscore  from  stuscore  group   by  subject
None.gif
None.gif) t2
None.gif
None.gif
where  t1.subject = t2.subject  and  t1.score = t2.maxscore
None.gif
None.gif

6.列出各门课程成绩最好的两位学生

None.gif select   distinct  t1. *   from  stuscore t1 
None.gif
None.gif
where  t1.stuid  in  
None.gif
None.gif(
select   top   2  stuscore.stuid  from  stuscore  where  subject  =  t1.subject  order   by  score  desc
None.gif
None.gif
order   by  t1.subject


7.学号    姓名    语文     数学     英语     总分  平均分

None.gif select  stuid  as  学号,name  as  姓名,
None.gif
None.gif
sum ( case   when  subject = ' 语文 '   then  score  else   0   end as  语文,
None.gif
None.gif
sum ( case   when  subject = ' 数学 '   then  score  else   0   end as  数学,
None.gif
None.gif
sum ( case   when  subject = ' 英语 '   then  score  else   0   end as  英语,
None.gif
None.gif
sum (score)  as  总分,( sum (score) / count ( * ))  as  平均分
None.gif
None.gif
from  stuscore
None.gif
None.gif
group   by  stuid,name 
None.gif
None.gif
order   by  总分desc
None.gif

8.列出各门课程的平均成绩

None.gif select  subject, avg (score)  as  avgscore  from  stuscore
None.gif
None.gif
group   by  subject
None.gif

9.列出数学成绩的排名

None.gif declare   @tmp   table (pm  int ,name  varchar ( 50 ),score  int ,stuid  int )
None.gif
None.gif
insert   into   @tmp   select   null ,name,score,stuid  from  stuscore  where  subject = ' 数学 '   order   by  score  desc
None.gif
None.gif
declare   @id   int
None.gif
None.gif
set   @id = 0 ;
None.gif
None.gif
update   @tmp   set   @id = @id + 1 ,pm = @id
None.gif
None.gif
select   *   from   @tmp  
None.gif
None.gif

 

None.gif select   DENSE_RANK ()  OVER ( order   by  score  desc as  row,name,subject,score,stuid  from  stuscore  where  subject = ' 数学 '
None.gif
None.gif
order   by  score  desc
None.gif

None.gif declare   @tmp   table (pm  int   identity ( 1 , 1 ),name  varchar ( 50 ),score  int ,stuid  int )
None.gif
insert   into   @tmp  
None.gif
select  name,score,stuid  from  stuscore  where  subject = ' 数学 '   order   by  score  desc
None.gif
select   *   from   @tmp

10. 列出数学成绩在2-3名的学生

None.gif select  t3. *    from
None.gif
None.gif(
None.gif
None.gif
select   top   2  t2. *    from  (
None.gif
None.gif
select   top   3  name,subject,score,stuid  from  stuscore  where  subject = ' 数学 '
None.gif
None.gif
order   by  score  desc
None.gif
None.gif) t2 
order   by  t2.score
None.gif
None.gif) t3 
order   by  t3.score  desc
None.gif

11. 求出李四的数学成绩的排名


None.gif declare   @tmp   table (pm  int ,name  varchar ( 50 ),score  int ,stuid  int )
None.gif
None.gif
insert   into   @tmp   select   null ,name,score,stuid  from  stuscore  where  subject = ' 数学 '   order   by  score  desc
None.gif
None.gif
declare   @id   int
None.gif
None.gif
set   @id = 0 ;
None.gif
None.gif
update   @tmp   set   @id = @id + 1 ,pm = @id
None.gif
None.gif
select   *   from   @tmp   where  name = ' 李四 '
None.gif

12. 课程    不及格( -59    良( -80    优( -100
None.gif select  subject, 
None.gif
None.gif(
select   count ( * from  stuscore  where  score < 60   and  subject = t1.subject)  as  不及格,
None.gif
None.gif(
select   count ( * from  stuscore  where  score  between   60   and   80   and  subject = t1.subject)  as  良,
None.gif
None.gif(
select   count ( * from  stuscore  where  score  > 80   and  subject = t1.subject)  as  优
None.gif
None.gif
from  stuscore t1  group   by  subject
None.gif
13. 数学: 张三 (50 ), 李四 (90 ), 王五 (90 ), 赵六 (76 )

None.gif declare   @s   varchar ( 1000 )
None.gif
None.gif
set   @s = ''
None.gif
None.gif
select   @s   = @s + ' , ' + name + ' ( ' + convert ( varchar ( 10 ),score) + ' 分) '   from  stuscore  where  subject = ' 数学 '  
None.gif
None.gif
set   @s = stuff ( @s , 1 , 1 , '' )
None.gif
None.gif
print   ' 数学: ' + @s
None.gif
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值