转(http://www.cnblogs.com/tenghoo/archive/2007/06/11/779240.html
学生成绩表(stuscore):

姓名:name

课程:subject

分数:score

学号:stuid

张三

数学

89

1

张三

语文

80

1

张三

英语

70

1

李四

数学

90

2

李四

语文

70

2

李四

英语

80

2

OFF

SQL统计,学生成绩

问题:

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

SQL统计,学生成绩select name,sum(score) as allscore from stuscore group by name order by allscore
SQL统计,学生成绩
SQL统计,学生成绩

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

SQL统计,学生成绩select distinct t1.name,t1.stuid,t2.allscore from  stuscore t1,
SQL统计,学生成绩
SQL统计,学生成绩(
SQL统计,学生成绩
SQL统计,学生成绩    
select stuid,sum(score) as allscore from stuscore group by stuid
SQL统计,学生成绩
SQL统计,学生成绩)t2
SQL统计,学生成绩
SQL统计,学生成绩
where t1.stuid=t2.stuid
SQL统计,学生成绩
SQL统计,学生成绩
order by t2.allscore desc
SQL统计,学生成绩

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

SQL统计,学生成绩 select t1.stuid,t1.name,t1.subject,t1.score from stuscore t1,
SQL统计,学生成绩
SQL统计,学生成绩(
SQL统计,学生成绩
SQL统计,学生成绩
select stuid,max(score) as maxscore from stuscore group by stuid
SQL统计,学生成绩
SQL统计,学生成绩) t2
SQL统计,学生成绩
SQL统计,学生成绩
where t1.stuid=t2.stuid and t1.score=t2.maxscore
SQL统计,学生成绩

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

SQL统计,学生成绩select distinct t1.stuid,t1.name,t2.avgscore from stuscore t1,
SQL统计,学生成绩
SQL统计,学生成绩(
SQL统计,学生成绩
SQL统计,学生成绩
select stuid,avg(score) as avgscore from stuscore group by stuid
SQL统计,学生成绩
SQL统计,学生成绩) t2
SQL统计,学生成绩
SQL统计,学生成绩
where t1.stuid=t2.stuid
SQL统计,学生成绩

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

SQL统计,学生成绩select  t1.stuid,t1.name,t1.subject,t2.maxscore from stuscore t1,
SQL统计,学生成绩
SQL统计,学生成绩(
SQL统计,学生成绩
SQL统计,学生成绩
select subject,max(score) as maxscore from stuscore group by subject
SQL统计,学生成绩
SQL统计,学生成绩) t2
SQL统计,学生成绩
SQL统计,学生成绩
where t1.subject=t2.subject and t1.score=t2.maxscore
SQL统计,学生成绩
SQL统计,学生成绩

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

SQL统计,学生成绩select distinct t1.* from stuscore t1 
SQL统计,学生成绩
SQL统计,学生成绩
where t1.stuid in 
SQL统计,学生成绩
SQL统计,学生成绩(
select top 2 stuscore.stuid from stuscore where subject = t1.subject order by score desc
SQL统计,学生成绩
SQL统计,学生成绩
order by t1.subject


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

SQL统计,学生成绩select stuid as 学号,name as 姓名,
SQL统计,学生成绩
SQL统计,学生成绩
sum(case when subject='语文' then score else 0 endas 语文,
SQL统计,学生成绩
SQL统计,学生成绩
sum(case when subject='数学' then score else 0 endas 数学,
SQL统计,学生成绩
SQL统计,学生成绩
sum(case when subject='英语' then score else 0 endas 英语,
SQL统计,学生成绩
SQL统计,学生成绩
sum(score) as 总分,(sum(score)/count(*)) as 平均分
SQL统计,学生成绩
SQL统计,学生成绩
from stuscore
SQL统计,学生成绩
SQL统计,学生成绩
group by stuid,name 
SQL统计,学生成绩
SQL统计,学生成绩
order by 总分desc
SQL统计,学生成绩

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

SQL统计,学生成绩select subject,avg(score) as avgscore from stuscore
SQL统计,学生成绩
SQL统计,学生成绩
group by subject
SQL统计,学生成绩

9.列出数学成绩的排名

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

 

SQL统计,学生成绩select  DENSE_RANK () OVER(order by score descas row,name,subject,score,stuid from stuscore where subject='数学'
SQL统计,学生成绩
SQL统计,学生成绩
order by score desc
SQL统计,学生成绩

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

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

SQL统计,学生成绩select t3.*  from
SQL统计,学生成绩
SQL统计,学生成绩(
SQL统计,学生成绩
SQL统计,学生成绩
select top 2 t2.*  from (
SQL统计,学生成绩
SQL统计,学生成绩
select top 3 name,subject,score,stuid from stuscore where subject='数学'
SQL统计,学生成绩
SQL统计,学生成绩
order by score desc
SQL统计,学生成绩
SQL统计,学生成绩) t2 
order by t2.score
SQL统计,学生成绩
SQL统计,学生成绩) t3 
order by t3.score desc
SQL统计,学生成绩

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


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

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

SQL统计,学生成绩declare @s varchar(1000)
SQL统计,学生成绩
SQL统计,学生成绩
set @s=''
SQL统计,学生成绩
SQL统计,学生成绩
select @s =@s+','+name+'('+convert(varchar(10),score)+'分)' from stuscore where subject='数学' 
SQL统计,学生成绩
SQL统计,学生成绩
set @s=stuff(@s,1,1,'')
SQL统计,学生成绩
SQL统计,学生成绩
print '数学:'+@s
SQL统计,学生成绩

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-10
  • 2021-08-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-12
  • 2021-06-20
  • 2022-12-23
  • 2022-02-17
  • 2022-01-04
相关资源
相似解决方案