sql server查询每门课程的前两名的学生编号,课程编号,成绩并排序

数据结构介绍:

成绩表(编号,学号,科目编号,成绩)

SQL基础了解:

select * from 成绩表

对于Sql Server它查询的过程是逐条查询的,也就是一条一条记录进行查询的;

那么我们可以先思考下,当它查“成绩表”时,第一条成功后才查询第二条的;

 

假设查特定的一门科目的最高分值前2条记录:

select top 2 * from 成绩表  where 科目编号=1  order by 成绩 DESC

 

 那么当要查询每一门科目成绩的前两条,就可以这样思考:

select  查询到第一条时,会得到 (编号,学号,科目编号,成绩),

那么这一条记录是否符当前成绩是当前科目最高分的前两条件呢?

上边已经处理为取前两条的方法了,那么这里进行下应该就可以了:

 select 学号,科目编号,成绩 from 成绩表 AS A

 

where 学号 in

 (

select top 2 学号 from 成绩表 AS B  where B.科目编号= A.科目编号  order by 成绩 DESC
)

 

 上面的脚本可以理解为:

因为查询是逐条的,所以(黄色区域)可以理解为,当第一条数据获取后就进行条件判断;

学号是否存在于当前记录中科目最高成绩的前两条;

子查询部分就是当前这条记录的科目最高成绩的前两个学号

转载于:https://www.cnblogs.com/yijie/archive/2011/05/06/2039105.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值