sql 统计-关于学生成绩

编程入门 行业动态 更新时间:2024-10-24 06:25:32

sql 统计-关于学生<a href=https://www.elefans.com/category/jswz/34/1769940.html style=成绩"/>

sql 统计-关于学生成绩

sql统计-关于学生成绩


 

学生成绩表(stuscore):

 姓名:name  

 课程:subject  

 分数:score  

 学号:stuid  

张三

数学

89

1

张三

语文

80

1

张三

英语

70

1

李四

数学

90

2

李四

语文

70

2

李四

英语

80

2

创建表
SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[stuscore](

    [name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

    [subject] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

    [score] [int] NULL,

    [stuid] [int] NULL

) ON [PRIMARY]

 

GO

SET ANSI_PADDING OFF

问题:

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.       计算每个人的总成绩并排名

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

order by后的字段必须是原始表中的已经存在的字段,或者根据原始表生成的数据。

 GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。.html

ORDER BY 关键字用于对结果集进行排序。  .html  




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

select  distinct t1.name,t1.stuid,t2.allscore  from  stuscore t1,

(

     select stuid, sum(score)  as allscore  from stuscore  group  by stuid

)t2

where t1.stuid =t2.stuid

order  by t2.allscore  desc

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

  select t1.stuid,t1.name,t1.subject,t1.score  from stuscore t1,

(

select stuid, max(score)  as maxscore  from stuscore  group  by stuid

) t2

where t1.stuid =t2.stuid  and t1.score =t2.maxscore

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

select  distinct t1.stuid,t1.name,t2.avgscore  from stuscore t1,

(

select stuid, avg(score)  as avgscore  from stuscore  group  by stuid

) t2

where t1.stuid =t2.stuid

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

select  t1.stuid,t1.name,t1.subject,t2.maxscore  from stuscore t1,

(

select subject, max(score)  as maxscore  from stuscore  group  by subject

) t2

where t1.subject =t2.subject  and t1.score =t2.maxscore

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

select  distinct t1. *  from stuscore t1 

where t1.stuid  in 

( select  top  2 stuscore.stuid  from stuscore  where subject  = t1.subject  order  by score  desc) 

order  by t1.subject


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

select stuid  as 学号,name  as 姓名,

sum( case  when subject = ' 语文 '  then score  else  0  end)  as 语文,

sum( case  when subject = ' 数学 '  then score  else  0  end)  as 数学,

sum( case  when subject = ' 英语 '  then score  else  0  end)  as 英语,

sum(score)  as 总分,( sum(score) / count( *))  as 平均分

from stuscore

group  by stuid,name 

order  by 总分desc

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

select subject, avg(score)  as avgscore  from stuscore

group  by subject

9.列出数学成绩的排名

declare  @tmp  table(pm int,name varchar( 50),score int,stuid int)

insert  into  @tmp  select  null,name,score,stuid  from stuscore  where subject = ' 数学 '  order  by score  desc

declare  @id int

set  @id = 0;

update  @tmp  set  @id = @id + 1,pm = @id

select  *  from  @tmp 

 

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

order  by score  desc

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

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

select t3. *   from

(

select  top  2 t2. *   from (

select  top  3 name,subject,score,stuid  from stuscore  where subject = ' 数学 '

order  by score  desc

) t2  order  by t2.score

) t3  order  by t3.score  desc

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

declare  @tmp  table(pm int,name varchar( 50),score int,stuid int)

insert  into  @tmp  select  null,name,score,stuid  from stuscore  where subject = ' 数学 '  order  by score  desc

declare  @id int

set  @id = 0;

update  @tmp  set  @id = @id + 1,pm = @id

select  *  from  @tmp  where name = ' 李四 '

12. 课程    不及格( -59 )    良( -80 )    优( -100 )
select  subject, 

( select   count ( * )  from  stuscore  where  score < 60   and  subject = t1.subject)  as  不及格,

( select   count ( * )  from  stuscore  where  score  between   60   and   80   and  subject = t1.subject)  as  良,

( select   count ( * )  from  stuscore  where  score  > 80   and  subject = t1.subject)  as  优

from  stuscore t1  group   by  subject
13. 数学: 张三 (50 分 ), 李四 (90 分 ), 王五 (90 分 ), 赵六 (76 分 )
declare  @s   varchar ( 1000 )

set  @s = ''

select  @s   =@s + ' , ' + name + ' ( ' + convert ( varchar ( 10 ),score) + ' 分) '   from  stuscore  where  subject = ' 数学 '  

set  @s = stuff (@s , 1 , 1 , '' )

print   ' 数学: ' +@s

更多推荐

sql 统计-关于学生成绩

本文发布于:2024-03-10 14:42:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1728251.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:成绩   学生   sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!