学生成绩表(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

相关文章:

  • 2021-10-31
  • 2021-10-11
  • 2022-01-23
  • 2021-11-28
  • 2021-08-09
  • 2021-05-01
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2021-11-27
  • 2022-12-23
  • 2021-11-15
  • 2022-02-11
  • 2021-06-01
  • 2021-08-31
相关资源
相似解决方案