在SQL SERVER中,怎样查询每门功课成绩最好的前两名,帮我写一下,谢谢,请补充:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SQL SERVER中,怎样查询每门功课成绩最好的前两名,帮我写一下,谢谢,请补充:相关的知识,希望对你有一定的参考价值。

create table SC(
S# varchar(10), /*学号
C# varchar(10), /*课号
score decimal(18,1) /*成绩
)
insert into sc values('01' , '01' , 80)
insert into sc values('01' , '02' , 90)
insert into sc values('01' , '03' , 99)
insert into sc values('02' , '01' , 70)
insert into sc values('02' , '02' , 60)
insert into sc values('02' , '03' , 80)
insert into sc values('03' , '01' , 80)
insert into sc values('03' , '02' , 80)
insert into sc values('03' , '03' , 80)
insert into sc values('04' , '01' , 50)
insert into sc values('04' , '02' , 30)
insert into sc values('04' , '03' , 20)
insert into sc values('05' , '01' , 76)
insert into sc values('05' , '02' , 87)
insert into sc values('06' , '01' , 31)
insert into sc values('06' , '03' , 34)
insert into sc values('07' , '02' , 89)
insert into sc values('07' , '03' , 98)
go

查询每门功课成绩最好的前两名,求高手指教。
最后的执行结果是:
01 01 80.0
03 01 80.0
01 02 90.0
07 02 89.0
01 03 99.0
07 03 98.0
select sc1.s#,sc1.c#,sc1.score from sc sc1 where score in
(select top 2 sc2.score from sc sc2
where sc2.C# = sc1.C# order by sc2.score desc)
order by sc1.C# , sc1.score desc
这样的语句也能实现同样的功能,但我有点看不太懂,能各位高手能帮我分析一下吗,呵呵。谢谢。where sc2.C# = sc1.C#这里又用到了SC1,感觉有点头晕。

create table #SC(
S# varchar(10), --学号
C# varchar(10), --课号
score decimal(18,1) --成绩
)
insert into #sc values('01' , '01' , 80)
insert into #sc values('01' , '02' , 90)
insert into #sc values('01' , '03' , 99)
insert into #sc values('02' , '01' , 70)
insert into #sc values('02' , '02' , 60)
insert into #sc values('02' , '03' , 80)
insert into #sc values('03' , '01' , 80)
insert into #sc values('03' , '02' , 80)
insert into #sc values('03' , '03' , 80)
insert into #sc values('04' , '01' , 50)
insert into #sc values('04' , '02' , 30)
insert into #sc values('04' , '03' , 20)
insert into #sc values('05' , '01' , 76)
insert into #sc values('05' , '02' , 87)
insert into #sc values('06' , '01' , 31)
insert into #sc values('06' , '03' , 34)
insert into #sc values('07' , '02' , 89)
insert into #sc values('07' , '03' , 98)
create table #temp
(
S# varchar(10), --学号
C# varchar(10), --课号
score decimal(18,1) --成绩
)
insert into #temp
select top 2 *from #SC where C#='01' order by score desc
insert into #temp
select top 2 *from #SC where C#='02' order by score desc
insert into #temp
select top 2 *from #SC where C#='03' order by score desc
select *from #temp
drop table #temp
drop table #SC

运行结果
S# C# score
01 01 80.0
03 01 80.0
01 02 90.0
07 02 89.0
01 03 99.0
07 03 98.0
参考技术A select * from
(
select top 2 * from SC where C#='01' order by score desc
) a
union
select * from
(
select top 2 * from SC where C#='02' order by score desc
) b
union
select * from
(
select top 2 * from SC where C#='03' order by score desc
) c
order by C#,S#,score本回答被提问者采纳
参考技术B SELECT
*
FROM
SC
WHERE
( SELECT
COUNT(1)
FROM
SC SC1
WHERE
SC.C# = SC1.C#
AND SC.score < SC1.score
) < 2
ORDER BY
C#,S#追问

1, SC.score < SC1.score
这条语句是什么意思啦?
2,()<2为什么,括号内为什么要小于2呢?

参考技术C 正确答案,给分吧!
select * from sc a
where s# in (
select s# from (select top 2 b.score,s# from sc b
where b.c#=a.c#
group by score,s#
order by score desc) c

)
order by c#,score desc
参考技术D 单独科目去查吧,一起查我也不会,单独查某门科目前两名用top就可以追问

这样查我也会,还是多学学吧。

sql: 练习题 25查询每门课程的平均成绩,结果按平均成绩降序排列

题目:查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

刚开始写的sql 比较简单:

SELECT courseid, AVG(score) as a FROM student_score GROUP BY courseid ORDER BY a DESC, courseid ASC;

 

但是我看到答案 可以列出 coursename:

但是coursename又是在student_course 表里面,要去关联这个表,但是对于GROUP BY聚合操作,如果在SELECT中的列中 要列出 coursename ,但是 coursename 没有在GROUP BY中出现,这样的sql 

是不合法的,会报错  因为列不在GROUP BY从句中,也就是说查出来的列必须在group by后面出现,否则就会报错,或者这个字段出现在聚合函数里面。 

但是我还是改了系统配置,执行了这个sql 不知道在工作中这样是不是合法的?

    SELECT courseid,student_course.coursename,
    AVG(score) as a FROM student_score,student_course WHERE student_score.courseid = student_course.id
    GROUP BY courseid ORDER BY a DESC, courseid ASC;

 

 

以上是关于在SQL SERVER中,怎样查询每门功课成绩最好的前两名,帮我写一下,谢谢,请补充:的主要内容,如果未能解决你的问题,请参考以下文章

sql 练习题 36,37查询每门功成绩最好的前两名,统计每门课程的学生选修人数(超过 5 人的课程才统计)

SQL查询每门课程最高分学生的学号,课程号,成绩

用一条sql语句查询出“每门”课程都大于80分的学生姓名

c语言 输入10个学生5门功课成绩求:1每个学生的平均分;2每门功课的平均分;3计算平均方差

我怎样才能找到每门课程的学生ID最高分

sql,查询每门课程最高分的学生的学号,课程号,成绩。再一张表里