学生成绩表(stuscore):
姓名:name |
课程:subject |
分数:score |
学号:stuid |
张三 |
数学 |
89 |
1 |
张三 |
语文 |
80 |
1 |
张三 |
英语 |
70 |
1 |
李四 |
数学 |
90 |
2 |
李四 |
语文 |
70 |
2 |
李四 |
英语 |
80 |
2 |
创建表
SET ANSI_NULLS ON
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
GO
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
SET QUOTED_IDENTIFIER ON
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
GO
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
SET ANSI_PADDING ON
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
GO
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
CREATE TABLE [dbo].[stuscore](
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
[name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
[subject] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
[score] [int] NULL,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
[stuid] [int] NULL
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) ON [PRIMARY]
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
GO
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
SET ANSI_PADDING OFF
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.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. 计算每个人的总成绩并排名
select
name,
sum
(score)
as
allscore
from
stuscore
group
by
name
order
by
allscore
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
2. 计算每个人的总成绩并排名
select
distinct
t1.name,t1.stuid,t2.allscore
from
stuscore t1,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
stuid,
sum
(score)
as
allscore
from
stuscore
group
by
stuid
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
)t2
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
where
t1.stuid
=
t2.stuid
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
order
by
t2.allscore
desc
3. 计算每个人单科的最高成绩
select
t1.stuid,t1.name,t1.subject,t1.score
from
stuscore t1,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
stuid,
max
(score)
as
maxscore
from
stuscore
group
by
stuid
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) t2
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
where
t1.stuid
=
t2.stuid
and
t1.score
=
t2.maxscore
4.计算每个人的平均成绩
select
distinct
t1.stuid,t1.name,t2.avgscore
from
stuscore t1,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
stuid,
avg
(score)
as
avgscore
from
stuscore
group
by
stuid
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) t2
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
where
t1.stuid
=
t2.stuid
5.列出各门课程成绩最好的学生
select
t1.stuid,t1.name,t1.subject,t2.maxscore
from
stuscore t1,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
subject,
max
(score)
as
maxscore
from
stuscore
group
by
subject
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) t2
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
where
t1.subject
=
t2.subject
and
t1.score
=
t2.maxscore
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
6.列出各门课程成绩最好的两位学生
select
distinct
t1.
*
from
stuscore t1
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
where
t1.stuid
in
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
select
top
2
stuscore.stuid
from
stuscore
where
subject
=
t1.subject
order
by
score
desc
)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
order
by
t1.subject
7.学号 姓名 语文 数学 英语 总分 平均分
select
stuid
as
学号,name
as
姓名,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
sum
(
case
when
subject
=
'
语文
'
then
score
else
0
end
)
as
语文,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
sum
(
case
when
subject
=
'
数学
'
then
score
else
0
end
)
as
数学,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
sum
(
case
when
subject
=
'
英语
'
then
score
else
0
end
)
as
英语,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
sum
(score)
as
总分,(
sum
(score)
/
count
(
*
))
as
平均分
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
from
stuscore
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
group
by
stuid,name
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
order
by
总分desc
8.列出各门课程的平均成绩
select
subject,
avg
(score)
as
avgscore
from
stuscore
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
group
by
subject
9.列出数学成绩的排名
declare
@tmp
table
(pm
int
,name
varchar
(
50
),score
int
,stuid
int
)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
insert
into
@tmp
select
null
,name,score,stuid
from
stuscore
where
subject
=
'
数学
'
order
by
score
desc
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
declare
@id
int
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
set
@id
=
0
;
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
update
@tmp
set
@id
=
@id
+
1
,pm
=
@id
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
*
from
@tmp
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
DENSE_RANK ()
OVER
(
order
by
score
desc
)
as
row,name,subject,score,stuid
from
stuscore
where
subject
=
'
数学
'
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
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
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
top
2
t2.
*
from
(
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
top
3
name,subject,score,stuid
from
stuscore
where
subject
=
'
数学
'
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
order
by
score
desc
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) t2
order
by
t2.score
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
) t3
order
by
t3.score
desc
11. 求出李四的数学成绩的排名
declare
@tmp
table
(pm
int
,name
varchar
(
50
),score
int
,stuid
int
)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
insert
into
@tmp
select
null
,name,score,stuid
from
stuscore
where
subject
=
'
数学
'
order
by
score
desc
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
declare
@id
int
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
set
@id
=
0
;
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
update
@tmp
set
@id
=
@id
+
1
,pm
=
@id
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
*
from
@tmp
where
name
=
'
李四
'
12.
课程
不及格(
-59
)
良(
-80
)
优(
-100
)
select
subject,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
select
count
(
*
)
from
stuscore
where
score
<
60
and
subject
=
t1.subject)
as
不及格,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
select
count
(
*
)
from
stuscore
where
score
between
60
and
80
and
subject
=
t1.subject)
as
良,
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
(
select
count
(
*
)
from
stuscore
where
score
>
80
and
subject
=
t1.subject)
as
优
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
from
stuscore t1
group
by
subject
13.
数学:
张三
(50
分
),
李四
(90
分
),
王五
(90
分
),
赵六
(76
分
)
declare
@s
varchar
(
1000
)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
set
@s
=
''
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
select
@s
=
@s
+
'
,
'
+
name
+
'
(
'
+
convert
(
varchar
(
10
),score)
+
'
分)
'
from
stuscore
where
subject
=
'
数学
'
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
set
@s
=
stuff
(
@s
,
1
,
1
,
''
)
![None.gif](http://img.e-com-net.com/image/info8/7da3525d42b249f380f90d23d1eaafba.gif)
print
'
数学:
'
+
@s